Skip to content

Commit b3f5baa

Browse files
authored
(arm64) fix save/restore for vec128 (#3979)
1 parent e826655 commit b3f5baa

File tree

3 files changed

+140
-136
lines changed

3 files changed

+140
-136
lines changed

runtime/arm64.S

Lines changed: 60 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -280,18 +280,18 @@ G(name):
280280
str x25, [TMP, 192]
281281
/* Save caller-save floating-point registers
282282
(callee-saves are preserved by C functions) */
283-
stp d0, d1, [TMP, 208]
284-
stp d2, d3, [TMP, 224]
285-
stp d4, d5, [TMP, 240]
286-
stp d6, d7, [TMP, 256]
287-
stp d16, d17, [TMP, 272]
288-
stp d18, d19, [TMP, 288]
289-
stp d20, d21, [TMP, 304]
290-
stp d22, d23, [TMP, 320]
291-
stp d24, d25, [TMP, 336]
292-
stp d26, d27, [TMP, 352]
293-
stp d28, d29, [TMP, 368]
294-
stp d30, d31, [TMP, 384]
283+
stp q0, q1, [TMP, 208]
284+
stp q2, q3, [TMP, 240]
285+
stp q4, q5, [TMP, 272]
286+
stp q6, q7, [TMP, 304]
287+
stp q16, q17, [TMP, 336]
288+
stp q18, q19, [TMP, 368]
289+
stp q20, q21, [TMP, 400]
290+
stp q22, q23, [TMP, 432]
291+
stp q24, q25, [TMP, 464]
292+
stp q26, q27, [TMP, 496]
293+
stp q28, q29, [TMP, 528]
294+
stp q30, q31, [TMP, 560]
295295
add TMP, TMP, #16
296296
str TMP, Caml_state(gc_regs)
297297
.endm
@@ -315,18 +315,18 @@ G(name):
315315
ldp x21, x22, [TMP, 160]
316316
ldp x23, x24, [TMP, 176]
317317
ldr x25, [TMP, 192]
318-
ldp d0, d1, [TMP, 208]
319-
ldp d2, d3, [TMP, 224]
320-
ldp d4, d5, [TMP, 240]
321-
ldp d6, d7, [TMP, 256]
322-
ldp d16, d17, [TMP, 272]
323-
ldp d18, d19, [TMP, 288]
324-
ldp d20, d21, [TMP, 304]
325-
ldp d22, d23, [TMP, 320]
326-
ldp d24, d25, [TMP, 336]
327-
ldp d26, d27, [TMP, 352]
328-
ldp d28, d29, [TMP, 368]
329-
ldp d30, d31, [TMP, 384]
318+
ldp q0, q1, [TMP, 208]
319+
ldp q2, q3, [TMP, 240]
320+
ldp q4, q5, [TMP, 272]
321+
ldp q6, q7, [TMP, 304]
322+
ldp q16, q17, [TMP, 336]
323+
ldp q18, q19, [TMP, 368]
324+
ldp q20, q21, [TMP, 400]
325+
ldp q22, q23, [TMP, 432]
326+
ldp q24, q25, [TMP, 464]
327+
ldp q26, q27, [TMP, 496]
328+
ldp q28, q29, [TMP, 528]
329+
ldp q30, q31, [TMP, 560]
330330
/* Put gc_regs struct back in bucket linked list */
331331
ldr TMP2, Caml_state(gc_regs_buckets)
332332
str TMP2, [TMP, 0] /* next ptr */
@@ -392,18 +392,18 @@ G(name):
392392
stp x12, x13, [TMP, 112]
393393
stp x14, x15, [TMP, 128]
394394
/* Save caller-save floating-point registers */
395-
stp d0, d1, [TMP, 208]
396-
stp d2, d3, [TMP, 224]
397-
stp d4, d5, [TMP, 240]
398-
stp d6, d7, [TMP, 256]
399-
stp d16, d17, [TMP, 272]
400-
stp d18, d19, [TMP, 288]
401-
stp d20, d21, [TMP, 304]
402-
stp d22, d23, [TMP, 320]
403-
stp d24, d25, [TMP, 336]
404-
stp d26, d27, [TMP, 352]
405-
stp d28, d29, [TMP, 368]
406-
stp d30, d31, [TMP, 384]
395+
stp q0, q1, [TMP, 208]
396+
stp q2, q3, [TMP, 240]
397+
stp q4, q5, [TMP, 272]
398+
stp q6, q7, [TMP, 304]
399+
stp q16, q17, [TMP, 336]
400+
stp q18, q19, [TMP, 368]
401+
stp q20, q21, [TMP, 400]
402+
stp q22, q23, [TMP, 432]
403+
stp q24, q25, [TMP, 464]
404+
stp q26, q27, [TMP, 496]
405+
stp q28, q29, [TMP, 528]
406+
stp q30, q31, [TMP, 560]
407407
add TMP, TMP, #16
408408
str TMP, Caml_state(gc_regs)
409409
.endm
@@ -423,18 +423,18 @@ G(name):
423423
ldp x10, x11, [TMP, 96]
424424
ldp x12, x13, [TMP, 112]
425425
ldp x14, x15, [TMP, 128]
426-
ldp d0, d1, [TMP, 208]
427-
ldp d2, d3, [TMP, 224]
428-
ldp d4, d5, [TMP, 240]
429-
ldp d6, d7, [TMP, 256]
430-
ldp d16, d17, [TMP, 272]
431-
ldp d18, d19, [TMP, 288]
432-
ldp d20, d21, [TMP, 304]
433-
ldp d22, d23, [TMP, 320]
434-
ldp d24, d25, [TMP, 336]
435-
ldp d26, d27, [TMP, 352]
436-
ldp d28, d29, [TMP, 368]
437-
ldp d30, d31, [TMP, 384]
426+
ldp q0, q1, [TMP, 208]
427+
ldp q2, q3, [TMP, 240]
428+
ldp q4, q5, [TMP, 272]
429+
ldp q6, q7, [TMP, 304]
430+
ldp q16, q17, [TMP, 336]
431+
ldp q18, q19, [TMP, 368]
432+
ldp q20, q21, [TMP, 400]
433+
ldp q22, q23, [TMP, 432]
434+
ldp q24, q25, [TMP, 464]
435+
ldp q26, q27, [TMP, 496]
436+
ldp q28, q29, [TMP, 528]
437+
ldp q30, q31, [TMP, 560]
438438
/* Put gc_regs struct back in bucket linked list */
439439
ldr TMP2, Caml_state(gc_regs_buckets)
440440
str TMP2, [TMP, 0] /* next ptr */
@@ -732,8 +732,8 @@ FUNCTION(caml_start_program)
732732

733733
L(jump_to_caml):
734734
/* Set up stack frame and save callee-save registers */
735-
stp x29, x30, [sp, -160]!
736-
CFI_ADJUST(160)
735+
stp x29, x30, [sp, -224]!
736+
CFI_ADJUST(224)
737737
CFI_OFFSET(29, 0)
738738
CFI_OFFSET(30, 8)
739739
add x29, sp, #0
@@ -742,10 +742,10 @@ L(jump_to_caml):
742742
stp x23, x24, [sp, 48]
743743
stp x25, x26, [sp, 64]
744744
stp x27, x28, [sp, 80]
745-
stp d8, d9, [sp, 96]
746-
stp d10, d11, [sp, 112]
747-
stp d12, d13, [sp, 128]
748-
stp d14, d15, [sp, 144]
745+
stp q8, q9, [sp, 96]
746+
stp q10, q11, [sp, 128]
747+
stp q12, q13, [sp, 160]
748+
stp q14, q15, [sp, 192]
749749
/* Load domain state pointer from argument */
750750
mov DOMAIN_STATE_PTR, TMP
751751
/* Reload allocation pointer */
@@ -841,12 +841,12 @@ L(return_result):
841841
ldp x23, x24, [sp, 48]
842842
ldp x25, x26, [sp, 64]
843843
ldp x27, x28, [sp, 80]
844-
ldp d8, d9, [sp, 96]
845-
ldp d10, d11, [sp, 112]
846-
ldp d12, d13, [sp, 128]
847-
ldp d14, d15, [sp, 144]
848-
ldp x29, x30, [sp], 160
849-
CFI_ADJUST(-160)
844+
ldp q8, q9, [sp, 96]
845+
ldp q10, q11, [sp, 128]
846+
ldp q12, q13, [sp, 160]
847+
ldp q14, q15, [sp, 192]
848+
ldp x29, x30, [sp], 224
849+
CFI_ADJUST(-224)
850850
/* Return to C caller */
851851
ret
852852
CFI_ENDPROC

runtime/caml/stack.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@
7878
#ifdef TARGET_arm64
7979
/* Size of the gc_regs structure, in words.
8080
See arm64.S and arm64/proc.ml for the indices */
81-
/* CR-someday mshinwell: update for SIMD */
82-
#define Wosize_gc_regs (2 + 24 /* int regs */ + 24 /* float regs */)
81+
/* The "*2" is for SIMD */
82+
#define Wosize_gc_regs (2 + 24 /* int regs */ + 24*2 /* float regs */)
8383
#define Saved_return_address(sp) *((intnat *)((sp) - 8))
8484
#define First_frame(sp) ((sp) + 16)
8585
#define Saved_gc_regs(sp) (*(value **)((sp) + 24))

0 commit comments

Comments
 (0)