Computer Hardware User's Guide

Floating-Point Conversion (IEEE Std. 754)
5-19
Data Formats and Floating-Point Operation
Example 5–5. IEEE-to-TMS320C3x Conversion (Complete Version)
* TITLE IEEE TO TMS320C3x CONVERSION (COMPLETE VERSION)
*
*
* SUBROUTINE FMIEEE1
*
* FUNCTION: CONVERSION BETWEEN THE IEEE FORMAT AND THE TMS320C3x
* FLOATING-POINT FORMAT. THE NUMBER TO BE CONVERTED
* IS IN THE LOWER 32 BITS OF R0. THE RESULT IS STORED
* IN THE UPPER 32 BITS OF R0.
*
*
* UPON ENTERING THE ROUTINE, AR1 POINTS TO THE FOLLOWING TABLE:
*
* (0) 0xFF800000 <–– AR1
* (1) 0xFF000000
* (2) 0x7F000000
* (3) 0x80000000
* (4) 0x81000000
* (5) 0x7F800000
* (6) 0x00400000
* (7) 0x007FFFFF
* (8) 0x7F7FFFFF
*
* ARGUMENT ASSIGNMENTS:
* ARGUMENT | FUNCTION
* –––––––––––+–––––––––––––––––––––––––––––––––––––
* R0 | NUMBER TO BE CONVERTED
* AR1 | POINTER TO TABLE WITH CONSTANTS
*
* REGISTERS USED AS INPUT: R0, AR1
* REGISTERS MODIFIED: R0, R1
* REGISTER CONTAINING RESULT: R0
*
* NOTE: SINCE THE STACK POINTER SP IS USED, MAKE SURE TO
* INITIALIZE IT IN THE CALLING PROGRAM.
*
*
* CYCLES: 23 (WORST CASE) WORDS: 34
*
.global FMIEEE1
*
FMIEEE1 LDI R0,R1
AND *+AR1(5),R1
BZ UNNORM ; If e = 0, number is either 0 or
* ; denormalized
XOR *+AR1(5),R1
BNZ NORMAL ; If e < 255, use regular routine