GNU assembler question for MPC555X assembler macros

Peter Dufault dufault at hda.com
Thu May 29 20:34:29 UTC 2014


On May 29, 2014, at 16:25 , Peter Dufault <dufault at hda.com> wrote:

> This is off-topic for RTEMS, but before I go to another list I'll see if anyone here can answer, plus people will know I'm looking at the MPC55XX DSP library.  I'm sure this is simple but I've spent .5 hours and not figured it out.
> 
> I want to do some timings on the Freescale MPC55XX DSP library, which comes in C and SPE (signal processing extension) assembler.  The C all built, but the macros don't assemble:
> 
> bitrev_table_16bit.s: Assembler messages:
> bitrev_table_16bit.s:116: Error: syntax error; end of line, expected `('
> 
> Here's the macro definition causing the above error:
> 
>    .set ONE_ITEM_TABLE_BYTESIZE,   2    #/* size of one item in seed table in bytes */
> #/* macros defining load/store instructions for different data types */
> .macro    load a,b
>            .if     ONE_ITEM_BYTESIZE == 8
>                evldw a,b
>            .elseif ONE_ITEM_BYTESIZE == 4
>                lwz   a,b
>            .else
>                lhz   a,b
>            .endif
>        .endm
> 
> And here is its invocation at line 116:
> 
>            load      tmp_i,0(i_addr);                            #/* load tmp_i */
> 
> I tried lots of variations of parenthesis without luck, always getting the same error:
> 
>            load      (tmp_i),(0(i_addr));                            #/* load tmp_i */
>            load      tmp_i,(0(i_addr));                            #/* load tmp_i */
> 
> Replacing it with what I know the expansion should be causes it to work:
>            lhz      tmp_i,0(i_addr);                            #/* load tmp_i */
> 
> Does anyone know the correct incantation?
> 
> Peter

Maybe never-mind.  I found that using a back-slash in the macro definition or using the assembler "-mri" flag generates the same new set of errors:

[dufault at litho9099 asm]$ make
bitrev_table_16bit.s: Assembler messages:
bitrev_table_16bit.s:101: Error: unsupported relocation against r1
bitrev_table_16bit.s:101: Error: invalid register operand when updating
bitrev_table_16bit.s:101: Error: unsupported relocation against r1
bitrev_table_16bit.s:102: Error: unsupported relocation against r31
bitrev_table_16bit.s:102: Error: unsupported relocation against r1
bitrev_table_16bit.s:103: Error: unsupported relocation against r30
bitrev_table_16bit.s:103: Error: unsupported relocation against r1
bitrev_table_16bit.s:104: Error: unsupported relocation against r29
bitrev_table_16bit.s:104: Error: unsupported relocation against r1
bitrev_table_16bit.s:105: Error: unsupported relocation against r28
bitrev_table_16bit.s:105: Error: unsupported relocation against r1
bitrev_table_16bit.s:147: Error: unsupported relocation against r31
bitrev_table_16bit.s:147: Error: unsupported relocation against r1
bitrev_table_16bit.s:148: Error: unsupported relocation against r30
bitrev_table_16bit.s:148: Error: unsupported relocation against r1
bitrev_table_16bit.s:149: Error: unsupported relocation against r29
bitrev_table_16bit.s:149: Error: unsupported relocation against r1
bitrev_table_16bit.s:150: Error: unsupported relocation against r28
bitrev_table_16bit.s:150: Error: unsupported relocation against r1
bitrev_table_16bit.s:151: Error: unsupported relocation against r1
bitrev_table_16bit.s:151: Error: unsupported relocation against r1

This is more of a problem than I expected. 

Peter
-----------------
Peter Dufault
HD Associates, Inc.      Software and System Engineering





More information about the users mailing list