Advertisement
Guest User

Untitled

a guest
Jan 15th, 2020
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. ; ***** SFLOAT32 DIVIDE **************************************************
  2. ; Function: SFLOAT32Div
  3. ; Input: SFLOAT32 |r23|r22|r21|r20|, SFLOAT32 |r19|r18|r17|r16|
  4. ; Output: SFLOAT32 |r27|r26|r25|r24|
  5. ; Destroys: SREG, r2, r18, r19, r24 ... r27
  6. ; Calls: None
  7. ; Cycles: 426 ... 456
  8. ; Bytes: 116
  9. ; Description: ?
  10. SFLOAT32Div:
  11. clt ; clear test bit for storing sign later
  12. eor r23, r19 ; xor leading bytes to xor sign bits
  13. sbrc r23, 7 ; skip if sign bit is cleared
  14. set ; store sign bit in test bit
  15. eor r23, r19 ; xor leading bytes to restore argument
  16.  
  17. lsl r22 ; shift the lsb of exponent into carry
  18. rol r23 ; rotate carry into leading byte s.t. it is the entire exponent
  19. sec ; set carry to rotate into 2nd byte
  20. ror r22 ; rotate carry s.t. msb of mantissa is a '1'
  21.  
  22. lsl r18 ; repeat above for 2nd argument
  23. rol r19 ; ^
  24. sec ; ^
  25. ror r18 ; ^
  26.  
  27. sub r23, r19 ; add exponents together
  28. subi r23, -128 ; add the offset of 127 plus upto 1 shift to normalize
  29.  
  30. clr r2 ; clear r2 for calculating carries later
  31. sub r19, r19 ; clear r19 for shifting remainder and clear carry
  32.  
  33. ldi r24, 25 ; initialize loop counter
  34.  
  35. SFLOAT32Div_loop:
  36. rol r25 ;
  37. rol r26 ;
  38. rol r27 ;
  39.  
  40. dec r24 ;
  41. breq SFLOAT32Div_Normalize ;
  42.  
  43. sub r20, r16 ;
  44. sbc r21, r17 ;
  45. sbc r22, r18 ;
  46. sbc r19, r2 ;
  47. brcc SFLOAT32Div_NNeg ;
  48.  
  49. add r20, r16 ;
  50. adc r21, r17 ;
  51. adc r22, r18 ;
  52. adc r19, r2 ;
  53.  
  54. lsl r20 ;
  55. rol r21 ;
  56. rol r22 ;
  57. rol r19 ;
  58.  
  59. rjmp SFLOAT32Div_Loop ;
  60.  
  61. SFLOAT32Div_NNeg:
  62. lsl r20 ;
  63. rol r21 ;
  64. rol r22 ;
  65. rol r19 ;
  66.  
  67. sec
  68. rjmp SFLOAT32Div_Loop ;
  69.  
  70. SFLOAT32Div_Normalize:
  71. dec r23 ;
  72. lsl r25 ;
  73. rol r26 ;
  74. rol r27 ;
  75.  
  76. brcc SFLOAT32Div_Normalize ;
  77. brts SFLOAT32Div_Sign ;
  78. clc ;
  79.  
  80. SFLOAT32Div_Sign:
  81. mov r22, r27 ;
  82. mov r21, r26 ;
  83. mov r20, r25 ;
  84. ror r23 ;
  85. ror r22 ;
  86. ror r21 ;
  87. ror r20 ;
  88.  
  89. ret ; return
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement