All pastes #414580 Raw Edit

Miscellany

public text v1 · immutable
#414580 ·published 2007-03-29 03:17 UTC
rendered paste body
execute_load_##load_type:                                                    ;\
  tst r0, #0xF0000000                     /* make sure address is in range */;\
  bne ext_load_##load_type                /* if not do ext load            */;\
                                                                             ;\
  ldr r2, 1f                              /* r2 = memory_map_read          */;\
  mov r1, r0, lsr #15                     /* r1 = page index of address    */;\
  ldr r2, [r2, lr, lsl #2]                /* r0 = memory page              */;\
                                                                             ;\
  cmp r2, #0                              /* see if map is ext             */;\
  beq ext_load_##load_type                /* if so do ext load             */;\
                                                                             ;\
  mov r0, r0, lsl #17                     /* isolate bottom 15 bits in top */;\
  mov r0, r0, lsr #17                     /* like performing and 0x7FFF    */;\
  load_op r0, [r2, r0]                    /* load result                   */;\
                                                                             ;\
  unalign_adjust_##load_type(r0)          /* adjust result for unalignment */;\
  bx lr                                   /* return                        */;\
                                                                             ;\
1:                                                                           ;\
  .word memory_map_read                                                      ;\
                                                                             ;\
ext_load_##load_type:                                                        ;\
  call_c_function(read_memory##load_function)                                ;\
  sign_extend_##load_type(r0)             /* sign extend result            */;\
  bx lr                                   /* return                        */;\