Changeset 215592 in webkit for trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM.cpp
- Timestamp:
- Apr 20, 2017, 4:55:45 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM.cpp
r215196 r215592 108 108 #define PTR_SIZE 4 109 109 #define PROBE_PROBE_FUNCTION_OFFSET (0 * PTR_SIZE) 110 #define PROBE_ARG1_OFFSET (1 * PTR_SIZE) 111 #define PROBE_ARG2_OFFSET (2 * PTR_SIZE) 112 113 #define PROBE_FIRST_GPREG_OFFSET (4 * PTR_SIZE) 110 #define PROBE_ARG_OFFSET (1 * PTR_SIZE) 111 112 #define PROBE_FIRST_GPREG_OFFSET (2 * PTR_SIZE) 114 113 115 114 #define GPREG_SIZE 4 … … 155 154 156 155 #define PROBE_SIZE (PROBE_FIRST_FPREG_OFFSET + (16 * FPREG_SIZE)) 156 #define PROBE_ALIGNED_SIZE (PROBE_SIZE) 157 157 158 158 // These ASSERTs remind you that if you change the layout of ProbeContext, … … 160 160 #define PROBE_OFFSETOF(x) offsetof(struct ProbeContext, x) 161 161 COMPILE_ASSERT(PROBE_OFFSETOF(probeFunction) == PROBE_PROBE_FUNCTION_OFFSET, ProbeContext_probeFunction_offset_matches_ctiMasmProbeTrampoline); 162 COMPILE_ASSERT(PROBE_OFFSETOF(arg1) == PROBE_ARG1_OFFSET, ProbeContext_arg1_offset_matches_ctiMasmProbeTrampoline); 163 COMPILE_ASSERT(PROBE_OFFSETOF(arg2) == PROBE_ARG2_OFFSET, ProbeContext_arg2_offset_matches_ctiMasmProbeTrampoline); 162 COMPILE_ASSERT(PROBE_OFFSETOF(arg) == PROBE_ARG_OFFSET, ProbeContext_arg_offset_matches_ctiMasmProbeTrampoline); 163 164 COMPILE_ASSERT(!(PROBE_CPU_R0_OFFSET & 0x3), ProbeContext_cpu_r0_offset_should_be_4_byte_aligned); 164 165 165 166 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.r0) == PROBE_CPU_R0_OFFSET, ProbeContext_cpu_r0_offset_matches_ctiMasmProbeTrampoline); … … 183 184 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.fpscr) == PROBE_CPU_FPSCR_OFFSET, ProbeContext_cpu_fpscr_offset_matches_ctiMasmProbeTrampoline); 184 185 186 COMPILE_ASSERT(!(PROBE_CPU_D0_OFFSET & 0xf), ProbeContext_cpu_d0_offset_should_be_16_byte_aligned); 187 185 188 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.d0) == PROBE_CPU_D0_OFFSET, ProbeContext_cpu_d0_offset_matches_ctiMasmProbeTrampoline); 186 189 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.d1) == PROBE_CPU_D1_OFFSET, ProbeContext_cpu_d1_offset_matches_ctiMasmProbeTrampoline); … … 199 202 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.d14) == PROBE_CPU_D14_OFFSET, ProbeContext_cpu_d14_offset_matches_ctiMasmProbeTrampoline); 200 203 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.d15) == PROBE_CPU_D15_OFFSET, ProbeContext_cpu_d15_offset_matches_ctiMasmProbeTrampoline); 204 201 205 COMPILE_ASSERT(sizeof(ProbeContext) == PROBE_SIZE, ProbeContext_size_matches_ctiMasmProbeTrampoline); 206 COMPILE_ASSERT(!(PROBE_ALIGNED_SIZE & 0xf), ProbeContext_aligned_size_offset_should_be_16_byte_aligned); 202 207 #undef PROBE_OFFSETOF 203 208 … … 212 217 // The top of stack now looks like this: 213 218 // esp[0 * ptrSize]: probeFunction 214 // esp[1 * ptrSize]: arg1 215 // esp[2 * ptrSize]: arg2 216 // esp[3 * ptrSize]: saved r3 / S0 217 // esp[4 * ptrSize]: saved ip 218 // esp[5 * ptrSize]: saved lr 219 // esp[6 * ptrSize]: saved sp 219 // esp[1 * ptrSize]: arg 220 // esp[2 * ptrSize]: saved r3 / S0 221 // esp[3 * ptrSize]: saved ip 222 // esp[4 * ptrSize]: saved lr 223 // esp[5 * ptrSize]: saved sp 220 224 221 225 "mov ip, sp" "\n" 222 226 "mov r3, sp" "\n" 223 "sub r3, r3, #" STRINGIZE_VALUE_OF(PROBE_ SIZE) "\n"227 "sub r3, r3, #" STRINGIZE_VALUE_OF(PROBE_ALIGNED_SIZE) "\n" 224 228 225 229 // The ARM EABI specifies that the stack needs to be 16 byte aligned. … … 238 242 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_PROBE_FUNCTION_OFFSET) "]" "\n" 239 243 "ldr lr, [ip, #1 * " STRINGIZE_VALUE_OF(PTR_SIZE) "]" "\n" 240 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_ARG 1_OFFSET) "]" "\n"244 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_ARG_OFFSET) "]" "\n" 241 245 "ldr lr, [ip, #2 * " STRINGIZE_VALUE_OF(PTR_SIZE) "]" "\n" 242 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_ ARG2_OFFSET) "]" "\n"246 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_R3_OFFSET) "]" "\n" 243 247 "ldr lr, [ip, #3 * " STRINGIZE_VALUE_OF(PTR_SIZE) "]" "\n" 244 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_ R3_OFFSET) "]" "\n"248 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_IP_OFFSET) "]" "\n" 245 249 "ldr lr, [ip, #4 * " STRINGIZE_VALUE_OF(PTR_SIZE) "]" "\n" 246 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_ IP_OFFSET) "]" "\n"250 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_LR_OFFSET) "]" "\n" 247 251 "ldr lr, [ip, #5 * " STRINGIZE_VALUE_OF(PTR_SIZE) "]" "\n" 248 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_LR_OFFSET) "]" "\n"249 "ldr lr, [ip, #6 * " STRINGIZE_VALUE_OF(PTR_SIZE) "]" "\n"250 252 "str lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_SP_OFFSET) "]" "\n" 251 253 … … 348 350 #endif // COMPILER(GCC_OR_CLANG) 349 351 350 void MacroAssemblerARM::probe(ProbeFunction function, void* arg 1, void* arg2)352 void MacroAssemblerARM::probe(ProbeFunction function, void* arg) 351 353 { 352 354 push(RegisterID::sp); … … 355 357 push(RegisterID::S0); 356 358 // The following uses RegisterID::S0. So, they must come after we push S0 above. 357 push(trustedImm32FromPtr(arg2)); 358 push(trustedImm32FromPtr(arg1)); 359 push(trustedImm32FromPtr(arg)); 359 360 push(trustedImm32FromPtr(function)); 360 361
Note:
See TracChangeset
for help on using the changeset viewer.