Advertisement
Guest User

ReCalcLoop

a guest
May 5th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 0.73 KB | None | 0 0
  1. .thumb
  2.  
  3. .macro _ldrLabelPointer reg, labelName
  4.     mov \reg, pc
  5.     .ifdef \labelName
  6.         sub \reg, #((. + 2) - (\labelName))
  7.     .else
  8.         add \reg, #((\labelName) - (. + 2))
  9.     .endif
  10. .endm
  11.  
  12. FE8CalcLoop:
  13.     push {r4-r7, lr}
  14.  
  15.     @ Saving Paramters
  16.     mov r4, r0
  17.     mov r5, r1
  18.    
  19.     @ Loading pointer to start of array
  20.     _ldrLabelPointer r6, RoutinePointerArray
  21.    
  22.     @ Moving StartLoop+1 to r7
  23.     mov r7, pc 
  24.     add r7, #1
  25.    
  26. StartLoop:
  27.     ldmia r6!, {r3}
  28.    
  29.     @ goto End if end of routine array
  30.     cmp r3, #0
  31.     beq End
  32.    
  33.     @ reverse thumb bit
  34.     mov r0, #1
  35.     eor r3, r0 @ default to thumb
  36.    
  37.     @ Loading parameters
  38.     mov r0, r4
  39.     mov r1, r5
  40.    
  41.     @ Calling Routine
  42.     mov lr, r7
  43.     bx r3
  44.    
  45. End:
  46.     pop {r4-r7, pc}
  47.  
  48. .ltorg
  49. .align
  50.  
  51. RoutinePointerArray:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement