Skip to content

Commit e53e858

Browse files
committed
WIP threadasm.S
1 parent 84dfbf5 commit e53e858

File tree

1 file changed

+26
-23
lines changed

1 file changed

+26
-23
lines changed

runtime/druntime/src/core/threadasm.S

+26-23
Original file line numberDiff line numberDiff line change
@@ -744,58 +744,61 @@ fiber_switchContext:
744744
.cfi_offset 14, -48
745745
.cfi_offset 15, -40
746746
lgr %r1, %r15
747-
aghi %r15, -64
747+
aghi %r15, -224
748748
/* we need to tell the debugger that the current stack offset is:
749-
64 (frame size) + 160 (parameter area size) */
750-
.cfi_def_cfa_offset 224
749+
64 (frame size, for storing f8 ~ f15) + 160 (temp parameter area size) + 160 (last parameter area size) */
750+
.cfi_def_cfa_offset 384
751751
/* store the (optional) backchain data */
752-
stg %r1, 0(%r15)
752+
stg %r1, 64(%r15)
753753
/* Save callee-saved floating point registers
754754
s390x ABI has a very unique way for storing fp registers:
755755
even-pairs first and odd-pairs last */
756756
std %f8, 0(%r15)
757-
.cfi_offset 24, -224
757+
.cfi_offset 24, -384
758758
std %f10, 8(%r15)
759-
.cfi_offset 25, -216
759+
.cfi_offset 25, -376
760760
std %f12, 16(%r15)
761-
.cfi_offset 26, -208
761+
.cfi_offset 26, -368
762762
std %f14, 24(%r15)
763-
.cfi_offset 27, -200
763+
.cfi_offset 27, -360
764764
std %f9, 32(%r15)
765-
.cfi_offset 28, -192
765+
.cfi_offset 28, -352
766766
std %f11, 40(%r15)
767-
.cfi_offset 29, -184
767+
.cfi_offset 29, -344
768768
std %f13, 48(%r15)
769-
.cfi_offset 30, -176
769+
.cfi_offset 30, -336
770770
std %f15, 56(%r15)
771-
.cfi_offset 31, -168
771+
.cfi_offset 31, -328
772772

773773
/* Save stack pointer, the stack pointer is adjusted so that
774774
GC won't see the float point registers */
775-
stg %r15, 0(%r2)
775+
la %r1, 64(%r15)
776+
stg %r1, 0(%r2)
776777

777778
/* Load the new context pointer as stack pointer. */
778779
lgr %r15, %r3
779-
.cfi_def_cfa_offset 224
780+
.cfi_def_cfa_offset 320
781+
aghi %r15, -64
782+
.cfi_def_cfa_offset 384
780783

781784
/* Restore call-saved floating point registers. */
782785
ld %f8, 0(%r15)
783-
.cfi_offset 24, -224
786+
.cfi_offset 24, -384
784787
ld %f10, 8(%r15)
785-
.cfi_offset 25, -216
788+
.cfi_offset 25, -376
786789
ld %f12, 16(%r15)
787-
.cfi_offset 26, -208
790+
.cfi_offset 26, -368
788791
ld %f14, 24(%r15)
789-
.cfi_offset 27, -200
792+
.cfi_offset 27, -360
790793
ld %f9, 32(%r15)
791-
.cfi_offset 28, -192
794+
.cfi_offset 28, -352
792795
ld %f11, 40(%r15)
793-
.cfi_offset 29, -184
796+
.cfi_offset 29, -344
794797
ld %f13, 48(%r15)
795-
.cfi_offset 30, -176
798+
.cfi_offset 30, -336
796799
ld %f15, 56(%r15)
797-
.cfi_offset 31, -168
798-
lmg %r6, %r14, 112(%r15)
800+
.cfi_offset 31, -328
801+
lmg %r6, %r14, 272(%r15)
799802
.cfi_offset 6, -112
800803
.cfi_offset 7, -104
801804
.cfi_offset 8, -96

0 commit comments

Comments
 (0)