Advertisement
uaa

codec_interface.c.diff

uaa
Jan 9th, 2023
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.34 KB | None | 0 0
  1. --- codec_interface.c.orig Mon Jan 9 15:14:20 2023
  2. +++ codec_interface.c Mon Jan 9 15:14:20 2023
  3. @@ -36,22 +36,17 @@ void codecDecode(uint8_t *indata_ptr, int numbBlocks)
  4. {
  5. uint16_t bitbuffer_decode[49];
  6.  
  7. -
  8. - register int r0 asm ("r0") __attribute__((unused));
  9. - register int r1 asm ("r1") __attribute__((unused));
  10. - register int r2 asm ("r2") __attribute__((unused));
  11. -
  12. for (int idx = 0; idx < numbBlocks; idx++)
  13. {
  14. initFrame(indata_ptr, bitbuffer_decode);
  15. indata_ptr += 9;
  16.  
  17. soundSetupBuffer();// this just sets currentWaveBuffer but the compiler seems to optimise out the code if I try to do it in this file
  18. - r2 = (int)bitbuffer_decode;
  19. - r0 = (int)currentWaveBuffer;
  20. - r1 = (int)ambebuffer_decode;
  21.  
  22. asm volatile (
  23. + "MOV R2, %0\n"
  24. + "MOV R0, %1\n"
  25. + "MOV R1, %2\n"
  26. "PUSH {R4-R11}\n"
  27. "SUB SP, SP, #0x10\n"
  28. "STR R1, [SP, #0x08]\n"
  29. @@ -64,16 +59,21 @@ void codecDecode(uint8_t *indata_ptr, int numbBlocks)
  30. "BL " QU(AMBE_DECODE)
  31. "ADD SP, SP, #0x10\n"
  32. "POP {R4-R11}"
  33. + :
  34. + : "r"(bitbuffer_decode),
  35. + "r"(currentWaveBuffer),
  36. + "r"(ambebuffer_decode)
  37. + : "memory"
  38. );
  39.  
  40. soundStoreBuffer();
  41.  
  42. soundSetupBuffer();// this just sets currentWaveBuffer but the compiler seems to optimise out the code if I try to do it in this file
  43. - r2 = (int)bitbuffer_decode;
  44. - r0 = (int)currentWaveBuffer;
  45. - r1 = (int)ambebuffer_decode;
  46.  
  47. asm volatile (
  48. + "MOV R2, %0\n"
  49. + "MOV R0, %1\n"
  50. + "MOV R1, %2\n"
  51. "PUSH {R4-R11}\n"
  52. "SUB SP, SP, #0x10\n"
  53. "STR R1, [SP, #0x08]\n"
  54. @@ -86,6 +86,11 @@ void codecDecode(uint8_t *indata_ptr, int numbBlocks)
  55. "BL " QU(AMBE_DECODE)
  56. "ADD SP, SP, #0x10\n"
  57. "POP {R4-R11}"
  58. + :
  59. + : "r"(bitbuffer_decode),
  60. + "r"(currentWaveBuffer),
  61. + "r"(ambebuffer_decode)
  62. + : "memory"
  63. );
  64.  
  65. soundStoreBuffer();
  66. @@ -94,21 +99,16 @@ void codecDecode(uint8_t *indata_ptr, int numbBlocks)
  67.  
  68. void codecEncodeBlock(uint8_t *outdata_ptr)
  69. {
  70. - register int r0 asm ("r0") __attribute__((unused));
  71. - register int r1 asm ("r1") __attribute__((unused));
  72. - register int r2 asm ("r2") __attribute__((unused));
  73. -
  74. memset((uint8_t *)outdata_ptr, 0, 9);// fills with zeros
  75. memset(bitbuffer_encode, 0, sizeof(bitbuffer_encode));// faster to call memset as it will be compiled as optimised code
  76.  
  77.  
  78. soundRetrieveBuffer();// gets currentWaveBuffer pointer used as input r2 to the encoder
  79.  
  80. - r0 = (int)bitbuffer_encode;
  81. - r2 = (int)currentWaveBuffer;//tmp_wavbuffer;
  82. - r1 = (int)ambebuffer_encode;// seems to be a hard coded (defined) memory address of 0x1FFF6B60. I'm not sure why it has to be hard coded, since its passed as a paramater (register)
  83. -
  84. asm volatile (
  85. + "MOV R0, %0\n"
  86. + "MOV R2, %1\n"
  87. + "MOV R1, %2\n"
  88. "PUSH {R4-R11}\n"
  89. "SUB SP, SP, #0x14\n"
  90. "STR R1, [SP, #0x0C]\n"
  91. @@ -123,15 +123,22 @@ void codecEncodeBlock(uint8_t *outdata_ptr)
  92. "BL " QU(AMBE_ENCODE)
  93. "ADD SP, SP, #0x14\n"
  94. "POP {R4-R11}"
  95. + :
  96. + : "r"(bitbuffer_encode),
  97. + "r"(currentWaveBuffer), //tmp_wavbuffer
  98. + /* seems to be a hard coded (defined) memory address of
  99. + 0x1FFF6B60. I'm not sure why it has to be hard coded,
  100. + since its passed as a paramater (register) */
  101. + "r"(ambebuffer_encode)
  102. + : "memory"
  103. );
  104.  
  105. soundRetrieveBuffer();// gets currentWaveBuffer pointer used as input r2 to the encoder
  106.  
  107. - r0 = (int)bitbuffer_encode;
  108. - r2 = (int)currentWaveBuffer;//tmp_wavbuffer;
  109. - r1 = (int)ambebuffer_encode;
  110. -
  111. asm volatile (
  112. + "MOV R0, %0\n"
  113. + "MOV R2, %1\n"
  114. + "MOV R1, %2\n"
  115. "PUSH {R4-R11}\n"
  116. "SUB SP, SP, #0x14\n"
  117. "STR R1, [SP, #0x0C]\n"
  118. @@ -146,12 +153,16 @@ void codecEncodeBlock(uint8_t *outdata_ptr)
  119. "BL " QU(AMBE_ENCODE)
  120. "ADD SP, SP, #0x14\n"
  121. "POP {R4-R11}"
  122. + :
  123. + : "r"(bitbuffer_encode),
  124. + "r"(currentWaveBuffer), //tmp_wavbuffer
  125. + "r"(ambebuffer_encode)
  126. + : "memory"
  127. );
  128.  
  129. - r0 = (int)bitbuffer_encode;
  130. - r1 = (int)ambebuffer_encode_ecc;
  131. -
  132. asm volatile (
  133. + "MOV R0, %0\n"
  134. + "MOV R1, %1\n"
  135. "PUSH {R4-R11}\n"
  136. "SUB SP, SP, #0x14\n"
  137. "MOV R3, R1\n"
  138. @@ -160,6 +171,10 @@ void codecEncodeBlock(uint8_t *outdata_ptr)
  139. "BL " QU(AMBE_ENCODE_ECC)
  140. "ADD SP, SP, #0x14\n"
  141. "POP {R4-R11}"
  142. + :
  143. + : "r"(bitbuffer_encode),
  144. + "r"(ambebuffer_encode_ecc)
  145. + : "memory"
  146. );
  147.  
  148. for (int i = 0; i < 72; i++)
  149.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement