tic4x assemble enhancements

Svein E. Seldal Svein.Seldal@solidas.com
Mon Nov 18 11:31:00 GMT 2002


Hello,

I have been working extensively on (binutils) tic4x-as lately. I believe 
it is fairly stable - I've reached my level of features that I want. Now 
I just need to test it extensively.

I have made substansial changes to the opcode definition 
(include/opcodes/tic4x.h) -- to make it simpler to do maintenance on it 
in the future. In this file a class concept is used. Each insn is placed 
into a class, based on its argument syntax. Thus the total opcode list 
is far easier to keep complete/free from bugs. If I refer to a class in 
this mail, please see this file.

This is the list of changes that may or may not affect (ti)c4x-gcc:

    - New commandline arguments are added, and some old ones are 
depreciated. Take a look at the bottom for a --help dump.
    - c33 is now supported
    - Gas is now fully ortogonal where it can be. E.g. mpyf r0 || addf 
r0 is legal (equal to mpyf r0,r0,r0 || addf r0,r0,r0). All aliased forms 
of insns are now accepted: mpyf3_addf3, mpyf_addf3, mpyf3_addf, 
mpyf_addf, addf3_mpyf3, addf_mpyf3, addf3_mpyf and addf_mpyf are all 
refering to the same insn!
    - Fixed the bugs in the old c4x-as: Added: addi_mpyi, addi3_mpyi3, 
or_sti, stf_ldf, sti_ash, stf_frieee, stf_toieee. Fixed bug in xor3.
    - Float insn wont accept non-float registers any more
    - The new c32 enhanced opcodes (use the -menhanced switch) are 
implemented. Internally they affect the argument type 'i' and 'j', and 
they allow use of registers where otherwise an indirect addressing 
should be used.
    - ... and a pile of other changes ...

I was hoping that gcc could improve from these changes. I am no skilled 
gcc-programmer, so I was hoping you could make something out of this. I 
can help, if you need it, but as I said, I'm not a skilled gcc 
programmer (yet... ;). Please let me know.

BTW! When I tried to compile gcc (from HEAD) with my configure patch 
installed. It died when it tried to compile _ffsdi2 from libgcc.c. xgcc 
generates a "ldhi xx,rs" opcode. I assumed that this op would only work 
on Rx registers. The c4x manual is a but vague on this - but you have 
proof that it works with non-Rx register, right? Anyway, I have removed 
the Rx contstraint from the op!

PS! What is the state of the c4x configure patch you have approved? It 
still isnt patched :(

Regards,
Svein Seldal
TIC4X Binutils maintainer




Dump from "tic4x-as --help":
----------------------------
TIC4X options:
   -mcpu=CPU  -mCPU        select architecture variant. CPU can be:
                             30 - TMS320C30
                             31 - TMS320C31, TMS320LC31
                             32 - TMS320C32
                             33 - TMS320VC33
                             40 - TMS320C40
                             44 - TMS320C44
   -mrev=REV               set cpu hardware revision (integer numbers).
                           Combinations of -mcpu and -mrev will 
enable/disable
                           the appropriate options (-midle2, -mlowpower and
                           -menhanced) according to the selected type
   -mbig                   select big memory model
   -msmall                 select small memory model (default)
   -mregparm               select register parameters (default)
   -mmemparm               select memory parameters
   -midle2                 enable IDLE2 support
   -mlowpower              enable LOPOWER and MAXSPEED support
   -menhanced              enable enhanced opcode support



More information about the Gcc mailing list