1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- /*
- * sie64a.S - low level sie call
- *
- * Copyright IBM Corp. 2008
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License (version 2 only)
- * as published by the Free Software Foundation.
- *
- * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
- */
- #include <linux/errno.h>
- #include <asm/asm-offsets.h>
- SP_R5 = 5 * 8 # offset into stackframe
- SP_R6 = 6 * 8
- /*
- * sie64a calling convention:
- * %r2 pointer to sie control block
- * %r3 guest register save area
- */
- .globl sie64a
- sie64a:
- lgr %r5,%r3
- stmg %r5,%r14,SP_R5(%r15) # save register on entry
- lgr %r14,%r2 # pointer to sie control block
- lmg %r0,%r13,0(%r3) # load guest gprs 0-13
- sie_inst:
- sie 0(%r14)
- lg %r14,SP_R5(%r15)
- stmg %r0,%r13,0(%r14) # save guest gprs 0-13
- lghi %r2,0
- lmg %r6,%r14,SP_R6(%r15)
- br %r14
- sie_err:
- lg %r14,SP_R5(%r15)
- stmg %r0,%r13,0(%r14) # save guest gprs 0-13
- lghi %r2,-EFAULT
- lmg %r6,%r14,SP_R6(%r15)
- br %r14
- .section __ex_table,"a"
- .quad sie_inst,sie_err
- .previous
|