So for the past few days I've been working on libgcc, making sure the compiler covers all instructions up to 32-bit operations.
Missing operations:
Count leading zero bits
__ctzsi2,__ctzhi2, __ctzqi2
Count trailing zero bits
__clzsi2,__clzhi2, __clzqi2
Find index of least significant bit
__ffssi2,__ffshi2, __ffsqi2
Return one if an even number of bits set
__paritysi2, __parityhi2, __parityqi2
Return number of set bits
__popcountsi2, __popcounthi2, __popcountqi
Signed division of 32-bit values
__divsi3
Unsigned division of 32-bit values
__udivsi3
Calculate modulus of 32-bit values
__modsi3
Calculate unsigned modulus of 32-bit values
__umodsi3
Do both division and modulus calculations
__divmodsi3
Do both unsigned division and modulus calculations
__udivmodsi3
Multiply 32-bit values
__mulsi3
For now, the trapped arithmetic instructions will be implemented using the default code. These functions call "abort" when there is an overflow condition, and are only needed in rare cases. The TMS9900 updates an overflow flag which we can use for this, but we can do that work later.
The other routines in libgcc are for floating-point and fixed-point math, odds are they are too big to really use. But again, I can fix that later.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment