0001
0002
0003
0004
0005
0006 #include "basic_asm.h"
0007 #include "gpr_asm.h"
0008 #include "fpu_asm.h"
0009 #include "vmx_asm.h"
0010 #include "vsx_asm.h"
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 FUNC_START(tm_signal_self_context_load)
0021 PUSH_BASIC_STACK(512)
0022
0023
0024
0025
0026 PUSH_VMX(STACK_FRAME_LOCAL(5,0),r8)
0027 PUSH_FPU(512)
0028 PUSH_NVREGS_BELOW_FPU(512)
0029 std r3, STACK_FRAME_PARAM(0)(sp)
0030 std r4, STACK_FRAME_PARAM(1)(sp)
0031 std r5, STACK_FRAME_PARAM(2)(sp)
0032 std r6, STACK_FRAME_PARAM(3)(sp)
0033 std r7, STACK_FRAME_PARAM(4)(sp)
0034
0035 ld r3, STACK_FRAME_PARAM(1)(sp)
0036 cmpdi r3, 0
0037 beq skip_gpr_lc
0038 bl load_gpr
0039 skip_gpr_lc:
0040 ld r3, STACK_FRAME_PARAM(2)(sp)
0041 cmpdi r3, 0
0042 beq skip_fpu_lc
0043 bl load_fpu
0044 skip_fpu_lc:
0045 ld r3, STACK_FRAME_PARAM(3)(sp)
0046 cmpdi r3, 0
0047 beq skip_vmx_lc
0048 bl load_vmx
0049 skip_vmx_lc:
0050 ld r3, STACK_FRAME_PARAM(4)(sp)
0051 cmpdi r3, 0
0052 beq skip_vsx_lc
0053 bl load_vsx
0054 skip_vsx_lc:
0055
0056
0057
0058
0059
0060 ld r3, STACK_FRAME_PARAM(0)(sp)
0061 tbegin.
0062 beq 1f
0063 tsuspend.
0064 ld r3, STACK_FRAME_PARAM(1)(sp)
0065 cmpdi r3, 0
0066 beq skip_gpr_lt
0067
0068 addi r3, r3, 8 * 18
0069 bl load_gpr
0070 skip_gpr_lt:
0071 ld r3, STACK_FRAME_PARAM(2)(sp)
0072 cmpdi r3, 0
0073 beq skip_fpu_lt
0074
0075 addi r3, r3, 8 * 18
0076 bl load_fpu
0077 skip_fpu_lt:
0078 ld r3, STACK_FRAME_PARAM(3)(sp)
0079 cmpdi r3, 0
0080 beq skip_vmx_lt
0081
0082 addi r3, r3, 16 * 12
0083 bl load_vmx
0084 skip_vmx_lt:
0085 ld r3, STACK_FRAME_PARAM(4)(sp)
0086 cmpdi r3, 0
0087 beq skip_vsx_lt
0088
0089 addi r3, r3, 16 * 12
0090 bl load_vsx
0091 skip_vsx_lt:
0092 li r0, 37
0093 ld r3, STACK_FRAME_PARAM(0)(sp)
0094 li r4, 10
0095 sc
0096 tabort. 0
0097 tresume.
0098
0099
0100
0101
0102
0103 li r3, 0
0104 1:
0105 POP_VMX(STACK_FRAME_LOCAL(5,0),r4)
0106 POP_FPU(512)
0107 POP_NVREGS_BELOW_FPU(512)
0108 POP_BASIC_STACK(512)
0109 blr
0110 FUNC_END(tm_signal_self_context_load)