2
0
mirror of https://github.com/boostorg/context.git synced 2026-01-19 04:02:17 +00:00

Improve ABI conformance of s390x fcontext

This commit is contained in:
ltrk2
2023-05-15 12:14:53 -07:00
parent e4e3014f3e
commit 3bedb2d779
3 changed files with 27 additions and 25 deletions

View File

@@ -49,11 +49,12 @@
.type jump_fcontext, @function
#define ARG_OFFSET 0
#define GR_OFFSET 16
#define FP_OFFSET 96
#define FPC_OFFSET 160
#define PC_OFFSET 168
#define CONTEXT_SIZE 176
#define GR_OFFSET 16
#define R14_OFFSET 88
#define FP_OFFSET 96
#define FPC_OFFSET 160
#define PC_OFFSET 168
#define CONTEXT_SIZE 176
#define REG_SAVE_AREA_SIZE 160
@@ -132,10 +133,13 @@ jump_fcontext:
jnz use_return_slot
/* We're restoring a context created by make_fcontext.
Use the function argument slot in the current context
and make sure it isn't deallocated. */
la %r2,ARG_OFFSET(%r15)
aghi %r15,-CONTEXT_SIZE
This is going to be the argument of the entry point
of the fiber. We're placing it on top of the ABI
defined register save area of the fiber's own stack. */
la %r2,REG_SAVE_AREA_SIZE(%r15)
/* REG_SAVE_AREA_SIZE + sizeof(transfer_t) */
aghi %r15,-(REG_SAVE_AREA_SIZE+16)
use_return_slot:
/* Save the two fields in transfer_t. When calling a

View File

@@ -49,12 +49,12 @@
.type make_fcontext, @function
#define ARG_OFFSET 0
#define GR_OFFSET 16
#define R14_OFFSET 88
#define FP_OFFSET 96
#define FPC_OFFSET 160
#define PC_OFFSET 168
#define CONTEXT_SIZE 176
#define GR_OFFSET 16
#define R14_OFFSET 88
#define FP_OFFSET 96
#define FPC_OFFSET 160
#define PC_OFFSET 168
#define CONTEXT_SIZE 176
/*
@@ -71,8 +71,8 @@ r4 - The address of the context function
make_fcontext:
.machine "z10"
/* Align the stack to an 16 byte boundary. */
nill %r2,0xfff0
/* Align the stack to an 8 byte boundary. */
nill %r2,0xfff8
/* Allocate stack space for the context. */
aghi %r2,-CONTEXT_SIZE

View File

@@ -49,13 +49,12 @@
.type ontop_fcontext, @function
#define ARG_OFFSET 0
#define GR_OFFSET 16
#define R14_OFFSET 88
#define FP_OFFSET 96
#define FPC_OFFSET 160
#define PC_OFFSET 168
#define CONTEXT_SIZE 176
#define GR_OFFSET 16
#define R14_OFFSET 88
#define FP_OFFSET 96
#define FPC_OFFSET 160
#define PC_OFFSET 168
#define CONTEXT_SIZE 176
/*
@@ -82,7 +81,6 @@ created via make_fcontext.
*/
ontop_fcontext:
.machine "z10"
/* Reserve stack space to store the current context. */
aghi %r15,-CONTEXT_SIZE