/* * 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 */ #include #include 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