Advertisement
Lexolordan

Untitled

Dec 20th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     .text
  2.     .global classify
  3. classify:
  4.     ldr r1, [r0]
  5.     ldr r2, [r0, #4]
  6.    
  7.     push {r4-r7}
  8.    
  9.     mov r4, #1
  10.     lsl r4, r4, #31 // s
  11.     and r4, r4, r2
  12.     lsr r4, r4, #31
  13.  
  14.     ldr r5, =2047
  15.     lsl r5, r5, #20
  16.     and r5, r5, r2 // e
  17.     lsr r5, r5, #20    
  18.  
  19.     ldr r7, =1048575
  20.     and r6, r2, r7
  21.     cmp r1, #0
  22.     movne r6, #1 // m
  23.    
  24.     cmp r4, #0
  25.     bne signed_classify
  26. unsigned_classify:
  27.     cmp r5, #0
  28.     bne unsigned_else
  29.    
  30.     cmp r6, #0
  31.     moveq r0, #0 // PlusZero
  32.     movne r0, #32 // PlusDenormal
  33.    
  34.     b exit_classify
  35. unsigned_else:
  36.     ldr r7, =2047
  37.     cmp r5, r7
  38.  
  39.     movne r0, #16 // PlusRegular
  40.     bne exit_classify
  41.    
  42.     cmp r6, #0
  43.     moveq r0, #240 // PlusInf
  44.     movne r0, #48 // SignalingNaN
  45.  
  46.     b exit_classify
  47. signed_classify:
  48.     cmp r5, #0
  49.     bne signed_else
  50.  
  51.     cmp r6, #0
  52.     moveq r0, #1 // MinusZero
  53.     movne r0, #33 // MinusDenormal
  54.  
  55.     b exit_classify
  56. signed_else:
  57.     ldr r7, =2047
  58.     cmp r5, r7
  59.  
  60.     movne r0, #17 // MinusRegular
  61.     bne exit_classify
  62.  
  63.     cmp r6, #0
  64.     moveq r0, #241 // MinusInf
  65.     movne r0, #49 // QuietNaN
  66.  
  67.     b exit_classify
  68. exit_classify:
  69.     pop {r4-r7}
  70.     bx lr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement