Author: Richard Plangger <[email protected]>
Branch: s390x-backend
Changeset: r82277:b41c97d15afd
Date: 2016-02-16 11:38 +0100
http://bitbucket.org/pypy/pypy/changeset/b41c97d15afd/
Log: stacklet switch command s390x was broken due to saving of f8-f15,
storing them into the standard frame in unused slots instead
diff --git a/rpython/translator/c/src/stacklet/switch_s390x_gcc.h
b/rpython/translator/c/src/stacklet/switch_s390x_gcc.h
--- a/rpython/translator/c/src/stacklet/switch_s390x_gcc.h
+++ b/rpython/translator/c/src/stacklet/switch_s390x_gcc.h
@@ -10,22 +10,18 @@
/* The Stackless version by Kristjan Valur Jonsson,
ported to s390x by Richard Plangger */
- "lay 15,-64(15)\n" /* additional stack space to store f8-f15 */
"stmg 6,15,48(15)\n"
- "std 0,128(15)\n"
- "std 2,136(15)\n"
- "std 4,144(15)\n"
- "std 6,152(15)\n"
+ // store f8 - f15 into the stack frame that is not used!
+ "std 8,128(15)\n"
+ "std 9,136(15)\n"
+ "std 10,144(15)\n"
+ "std 11,152(15)\n"
- "std 8, 160(15)\n"
- "std 9, 168(15)\n"
- "std 10,176(15)\n"
- "std 11,184(15)\n"
- "std 12,192(15)\n"
- "std 13,200(15)\n"
- "std 14,208(15)\n"
- "std 15,216(15)\n"
+ "std 12,16(15)\n"
+ "std 13,24(15)\n"
+ "std 14,32(15)\n"
+ "std 15,40(15)\n"
"lgr 10, %[restore_state]\n" /* save 'restore_state' for later */
"lgr 11, %[extra]\n" /* save 'extra' for later */
@@ -35,7 +31,7 @@
"lay 15,-160(15)\n" /* create stack frame */
"basr 14, 14\n" /* call save_state() */
- "lay 15, 160(15)\n" /* destroy stack frame */
+ "lay 15,160(15)\n"
"cgij 2, 0, 8, zero\n" /* skip the rest if the return value is null
*/
@@ -47,31 +43,24 @@
is already in r2 */
"lgr 3, 11\n" /* arg 2: extra */
-
- "lay 15, -160(15)\n" /* create temp stack space for callee to use */
- "basr 14, 10\n" /* call restore_state() */
- "lay 15, 160(15)\n" /* destroy temp stack space */
+ "lay 15,-160(15)\n" /* create stack frame */
+ "basr 14, 10\n" /* call restore_state() */
+ "lay 15,160(15)\n"
/* The stack's content is now restored. */
"zero:\n"
/* Epilogue */
- /* no need */ /* restore stack pointer */
+ "ld 8,128(15)\n"
+ "ld 9,136(15)\n"
+ "ld 10,144(15)\n"
+ "ld 11,152(15)\n"
- "ld 0,128(15)\n"
- "ld 2,136(15)\n"
- "ld 4,144(15)\n"
- "ld 6,152(15)\n"
-
- "ld 8, 160(15)\n"
- "ld 9, 168(15)\n"
- "ld 10,176(15)\n"
- "ld 11,184(15)\n"
- "ld 12,192(15)\n"
- "ld 13,200(15)\n"
- "ld 14,208(15)\n"
- "ld 15,216(15)\n"
+ "ld 12,16(15)\n"
+ "ld 13,24(15)\n"
+ "ld 14,32(15)\n"
+ "ld 15,40(15)\n"
"lmg 6,15,48(15)\n"
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit