On 01/29/2014 02:18 PM, Rafael Espíndola wrote:>> I'd like to just check my code in and then you can look at it in it's >> totality and see if you have >> a better solution . > No! > > If it is the compiler creating instructions, it is not inline > assembly. If you need to print mips16 and mips32 and they are two > independent instruction sets, my guess is that you need to figure out > how to swap between two AsmPrinters. > > Cheers, > RafaelWe do switch them already. We create different functions for the stubs and assign them the mips32 attribute. Then they get assembled. The need for these particular stubs cannot be recognized until isel lowering. Why do I need to make a complex mechanism here when all I need to do is emit some some inline assembly code at the end of asm printer? What purpose will this serve? Reed
On Wed, Jan 29, 2014 at 2:27 PM, reed kotler <rkotler at mips.com> wrote:> On 01/29/2014 02:18 PM, Rafael Espíndola wrote: >>> >>> I'd like to just check my code in and then you can look at it in it's >>> totality and see if you have >>> a better solution . >> >> No! >> >> If it is the compiler creating instructions, it is not inline >> assembly. If you need to print mips16 and mips32 and they are two >> independent instruction sets, my guess is that you need to figure out >> how to swap between two AsmPrinters. >> >> Cheers, >> Rafael > > We do switch them already. > > We create different functions for the stubs and assign them the mips32 > attribute. > > Then they get assembled. > > The need for these particular stubs cannot be recognized until isel > lowering. > > Why do I need to make a complex mechanism here when all I need to do is emit > some > some inline assembly code at the end of asm printer? > > What purpose will this serve? >Because we're not an assembly emitting compiler. We're an object file emitting compiler and it's breaking abstractions. The correct way to do the work here is to emit the functions and lower them appropriately. -eric
On 01/29/2014 02:32 PM, Eric Christopher wrote:> On Wed, Jan 29, 2014 at 2:27 PM, reed kotler <rkotler at mips.com> wrote: >> On 01/29/2014 02:18 PM, Rafael Espíndola wrote: >>>> >>>> I'd like to just check my code in and then you can look at it in it's >>>> totality and see if you have >>>> a better solution . >>> >>> No! >>> >>> If it is the compiler creating instructions, it is not inline >>> assembly. If you need to print mips16 and mips32 and they are two >>> independent instruction sets, my guess is that you need to figure out >>> how to swap between two AsmPrinters. >>> >>> Cheers, >>> Rafael >> >> We do switch them already. >> >> We create different functions for the stubs and assign them the mips32 >> attribute. >> >> Then they get assembled. >> >> The need for these particular stubs cannot be recognized until isel >> lowering. >> >> Why do I need to make a complex mechanism here when all I need to do is emit >> some >> some inline assembly code at the end of asm printer? >> >> What purpose will this serve? >> > > Because we're not an assembly emitting compiler. We're an object file > emitting compiler and it's breaking abstractions. The correct way to > do the work here is to emit the functions and lower them > appropriately. > > -eric >So explain to me how this mechanism would work. As I'm processing a single mips16 function, I realize that I need to create one or more mips32 helper functions. I'm in a function pass. So I'm not supposed to be creating new functions, as far as I understand. Also, I can't know which mips32 stub functions to create until I have processed all functions because otherwise I might create duplicates. So how would you do this within the existing LLVM pass structure? Reed