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 */;\