Advertisement
Guest User

Untitled

a guest
Sep 1st, 2015
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.37 KB | None | 0 0
  1. #include <nds.h>
  2.  
  3. #include <stdio.h>
  4.  
  5. #define PROLOG(token)\
  6.     "push {r0-r7}\n\t"\
  7.     "ldr r0, ="token"\n\t"\
  8.     "blx r0\n\t"\
  9.     "b "token"_ret\n\t"\
  10.     ".align 4\n\t"\
  11.     ".arm\n\t"\
  12.     token":\n\t"
  13.    
  14. #define EPILOG(token)\
  15.     ".align 2\n\t"\
  16.     ".thumb\n\t"\
  17.     token"_ret:\n\t"\
  18.     "pop {r0-r7}\n\t"\
  19.  
  20. long long var;
  21. int r2;
  22. int r2_new;
  23.    
  24. int main(void) {
  25.     consoleDemoInit();
  26.     puts("Testing ldmia...\n");
  27.     var = 0x1122334455667788;
  28.    
  29.     // ldmia, base first in list, writeback
  30.     puts("ldmia r2!, {r2, r3}");
  31.     asm
  32.     (
  33.         PROLOG("ldmia1")
  34.         "ldr r2, =var\n\t"
  35.         "ldr r1, =r2\n\t"
  36.         "str r2, [r1]\n\t"
  37.         "ldmia r2!, {r2, r3}\n\t"
  38.         "ldr r4, =r2_new\n\t"
  39.         "str r2, [r4]\n\t"
  40.         "bx lr\n\t"
  41.         EPILOG("ldmia1")
  42.     );
  43.     printf("r2 (old) = 0x%x\n", r2);
  44.     printf("r2 (new) = 0x%x\n", r2_new);
  45.     if (r2_new == r2 + 8)
  46.     {
  47.         puts("[OK]\n");
  48.     }
  49.     else
  50.     {
  51.         puts("[FAIL]\n");
  52.     }
  53.    
  54.     // ldmia, base second in list, writeback
  55.     puts("ldmia r2!, {r1, r2}");
  56.     asm
  57.     (
  58.         PROLOG("ldmia2")
  59.         "ldr r2, =var\n\t"
  60.         "ldr r1, =r2\n\t"
  61.         "str r2, [r1]\n\t"
  62.         "ldmia r2!, {r1, r2}\n\t"
  63.         "ldr r3, =r2_new\n\t"
  64.         "str r2, [r3]\n\t"
  65.         "bx lr\n\t"
  66.         EPILOG("ldmia2")
  67.     );
  68.     printf("r2 (old) = 0x%x\n", r2);
  69.     printf("r2 (new) = 0x%x\n", r2_new);
  70.     if (r2_new == 0x11223344)
  71.     {
  72.         puts("[OK]\n");
  73.     }
  74.     else
  75.     {
  76.         puts("[FAIL]\n");
  77.     }
  78.    
  79.     while(1) {
  80.         swiWaitForVBlank();
  81.     }
  82.  
  83.     return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement