Re: Assembly macro with parameters

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Fabrizio Fazzino wrote:
After three months I still have the same problem...

Suppose I want to generate my own opcode, let's say 0xC4000000,
inside a C program. Suppose this value is NOT a constant in
the macro I want to write since it will contain three
variable fields for the rd,rs,rt registers, so I need to calculate
the opcode at least at compilation time (at runtime is NOT
required).

Daniel suggested using .word and writing the function by hand,
but which is the syntax I have to use?

#define myopcode(rs,rt,rd) { \
  int opcode_number = 0xC4000000 | (rs<<21) | (rt<<16) | (rd<<11); \
  char opcode_string[20]; \
  sprintf(opcode_string, ".word 0x%X", opcode_number); \
  asm(opcode_string); \
}


The arguments to the asm() statement are strings not char*. They are evaluated at compile time not run time.

You will probably have to use the C preprocessor stringification and concatination operators ('#' and '##').

David Daney


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux