wma_arm.S 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. AREA |.text|, CODE, READONLY, ALIGN=2
  2. THUMB
  3. REQUIRE8
  4. PRESERVE8
  5. MULT32 PROC
  6. EXPORT MULT32
  7. MOV r2,r0
  8. SMULL r1,r0,r2,r1
  9. BX lr
  10. ENDP
  11. MULT31 PROC
  12. EXPORT MULT31
  13. SMULL r2,r1,r0,r1
  14. LSL r0,r1,#1
  15. BX lr
  16. ENDP
  17. MULT31_SHIFT15 PROC
  18. EXPORT MULT31_SHIFT15
  19. SMULL r2,r1,r0,r1
  20. LSRS r0,r2,#15
  21. ADC r0,r0,r1,LSL #17
  22. BX lr
  23. ENDP
  24. XPROD32 PROC
  25. EXPORT XPROD32
  26. PUSH {r4,r5,lr}
  27. SMULL lr,r12,r0,r2
  28. SMLAL lr,r12,r1,r3
  29. RSB lr,r0,#0
  30. SMULL r2,r0,r1,r2
  31. SMLAL r2,r0,lr,r3
  32. LDR r4,[sp,#0xc]
  33. LDR r5,[sp,#0x10]
  34. STR r12,[r4,#0]
  35. STR r0,[r5,#0]
  36. POP {r4,r5,pc}
  37. ENDP
  38. XPROD31 PROC
  39. EXPORT XPROD31
  40. PUSH {r4,r5,lr}
  41. SMULL lr,r12,r0,r2
  42. SMLAL lr,r12,r1,r3
  43. RSB lr,r0,#0
  44. SMULL r2,r0,r1,r2
  45. SMLAL r2,r0,lr,r3
  46. LDR r4,[sp,#0xc]
  47. LDR r5,[sp,#0x10]
  48. LSL r1,r12,#1
  49. LSL r0,r0,#1
  50. STR r1,[r4,#0]
  51. STR r0,[r5,#0]
  52. POP {r4,r5,pc}
  53. ENDP
  54. XNPROD31 PROC
  55. EXPORT XNPROD31
  56. PUSH {r4-r6,lr}
  57. SMULL r4,r12,r0,r2
  58. RSB lr,r1,#0
  59. SMLAL r4,r12,lr,r3
  60. SMULL lr,r2,r1,r2
  61. SMLAL lr,r2,r0,r3
  62. LDR r5,[sp,#0x10]
  63. LDR r6,[sp,#0x14]
  64. LSL r0,r12,#1
  65. STR r0,[r5,#0]
  66. LSL r0,r2,#1
  67. STR r0,[r6,#0]
  68. POP {r4-r6,pc}
  69. ENDP
  70. CLIP_TO_15 PROC
  71. EXPORT CLIP_TO_15
  72. SUBS r1, r0, #0x8000
  73. MOVPL r0, #0x7f00
  74. ORRPL r0, r0, #0xff
  75. ADDS r1, r0, #0x8000
  76. MOVMI r0,#0x8000
  77. BX lr
  78. ENDP
  79. END