Changeset 215592 in webkit for trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.cpp
- Timestamp:
- Apr 20, 2017, 4:55:45 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.cpp
r215196 r215592 44 44 #define PTR_SIZE 4 45 45 #define PROBE_PROBE_FUNCTION_OFFSET (0 * PTR_SIZE) 46 #define PROBE_ARG1_OFFSET (1 * PTR_SIZE) 47 #define PROBE_ARG2_OFFSET (2 * PTR_SIZE) 48 49 #define PROBE_FIRST_GPREG_OFFSET (3 * PTR_SIZE) 46 #define PROBE_ARG_OFFSET (1 * PTR_SIZE) 47 48 #define PROBE_FIRST_GPREG_OFFSET (2 * PTR_SIZE) 50 49 51 50 #define GPREG_SIZE 4 … … 106 105 #define PROBE_CPU_D31_OFFSET (PROBE_FIRST_FPREG_OFFSET + (31 * FPREG_SIZE)) 107 106 #define PROBE_SIZE (PROBE_FIRST_FPREG_OFFSET + (32 * FPREG_SIZE)) 107 #define PROBE_ALIGNED_SIZE (PROBE_SIZE) 108 108 109 109 // These ASSERTs remind you that if you change the layout of ProbeContext, … … 111 111 #define PROBE_OFFSETOF(x) offsetof(struct ProbeContext, x) 112 112 COMPILE_ASSERT(PROBE_OFFSETOF(probeFunction) == PROBE_PROBE_FUNCTION_OFFSET, ProbeContext_probeFunction_offset_matches_ctiMasmProbeTrampoline); 113 COMPILE_ASSERT(PROBE_OFFSETOF(arg1) == PROBE_ARG1_OFFSET, ProbeContext_arg1_offset_matches_ctiMasmProbeTrampoline); 114 COMPILE_ASSERT(PROBE_OFFSETOF(arg2) == PROBE_ARG2_OFFSET, ProbeContext_arg2_offset_matches_ctiMasmProbeTrampoline); 113 COMPILE_ASSERT(PROBE_OFFSETOF(arg) == PROBE_ARG_OFFSET, ProbeContext_arg_offset_matches_ctiMasmProbeTrampoline); 114 115 COMPILE_ASSERT(!(PROBE_CPU_R0_OFFSET & 0x3), ProbeContext_cpu_r0_offset_should_be_4_byte_aligned); 115 116 116 117 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.r0) == PROBE_CPU_R0_OFFSET, ProbeContext_cpu_r0_offset_matches_ctiMasmProbeTrampoline); … … 134 135 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.fpscr) == PROBE_CPU_FPSCR_OFFSET, ProbeContext_cpu_fpscr_offset_matches_ctiMasmProbeTrampoline); 135 136 137 COMPILE_ASSERT(!(PROBE_CPU_D0_OFFSET & 0xf), ProbeContext_cpu_d0_offset_should_be_16_byte_aligned); 138 136 139 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.d0) == PROBE_CPU_D0_OFFSET, ProbeContext_cpu_d0_offset_matches_ctiMasmProbeTrampoline); 137 140 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.d1) == PROBE_CPU_D1_OFFSET, ProbeContext_cpu_d1_offset_matches_ctiMasmProbeTrampoline); … … 169 172 170 173 COMPILE_ASSERT(sizeof(ProbeContext) == PROBE_SIZE, ProbeContext_size_matches_ctiMasmProbeTrampoline); 174 COMPILE_ASSERT(!(PROBE_ALIGNED_SIZE & 0xf), ProbeContext_aligned_size_offset_should_be_16_byte_aligned); 171 175 172 176 #undef PROBE_OFFSETOF … … 184 188 // The top of stack now looks like this: 185 189 // esp[0 * ptrSize]: probeFunction 186 // esp[1 * ptrSize]: arg1 187 // esp[2 * ptrSize]: arg2 188 // esp[3 * ptrSize]: saved r0 189 // esp[4 * ptrSize]: saved ip 190 // esp[5 * ptrSize]: saved lr 191 // esp[6 * ptrSize]: saved sp 190 // esp[1 * ptrSize]: arg 191 // esp[2 * ptrSize]: saved r0 192 // esp[3 * ptrSize]: saved ip 193 // esp[4 * ptrSize]: saved lr 194 // esp[5 * ptrSize]: saved sp 192 195 193 196 "mov ip, sp" "\n" 194 197 "mov r0, sp" "\n" 195 "sub r0, r0, #" STRINGIZE_VALUE_OF(PROBE_ SIZE) "\n"198 "sub r0, r0, #" STRINGIZE_VALUE_OF(PROBE_ALIGNED_SIZE) "\n" 196 199 197 200 // The ARM EABI specifies that the stack needs to be 16 byte aligned. … … 210 213 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_PROBE_FUNCTION_OFFSET) "]" "\n" 211 214 "ldr lr, [ip, #1 * " STRINGIZE_VALUE_OF(PTR_SIZE) "]" "\n" 212 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_ARG 1_OFFSET) "]" "\n"215 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_ARG_OFFSET) "]" "\n" 213 216 "ldr lr, [ip, #2 * " STRINGIZE_VALUE_OF(PTR_SIZE) "]" "\n" 214 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_ ARG2_OFFSET) "]" "\n"217 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_R0_OFFSET) "]" "\n" 215 218 "ldr lr, [ip, #3 * " STRINGIZE_VALUE_OF(PTR_SIZE) "]" "\n" 216 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_ R0_OFFSET) "]" "\n"219 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_IP_OFFSET) "]" "\n" 217 220 "ldr lr, [ip, #4 * " STRINGIZE_VALUE_OF(PTR_SIZE) "]" "\n" 218 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_ IP_OFFSET) "]" "\n"221 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_LR_OFFSET) "]" "\n" 219 222 "ldr lr, [ip, #5 * " STRINGIZE_VALUE_OF(PTR_SIZE) "]" "\n" 220 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_LR_OFFSET) "]" "\n"221 "ldr lr, [ip, #6 * " STRINGIZE_VALUE_OF(PTR_SIZE) "]" "\n"222 223 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_SP_OFFSET) "]" "\n" 223 224 … … 325 326 #endif // COMPILER(GCC_OR_CLANG) 326 327 327 void MacroAssemblerARMv7::probe(ProbeFunction function, void* arg 1, void* arg2)328 void MacroAssemblerARMv7::probe(ProbeFunction function, void* arg) 328 329 { 329 330 push(RegisterID::lr); … … 334 335 push(RegisterID::r0); 335 336 // The following uses RegisterID::ip. So, they must come after we push ip above. 336 push(trustedImm32FromPtr(arg2)); 337 push(trustedImm32FromPtr(arg1)); 337 push(trustedImm32FromPtr(arg)); 338 338 push(trustedImm32FromPtr(function)); 339 339
Note:
See TracChangeset
for help on using the changeset viewer.