Reactos

[CRT] Cleanup old setjmp

-366
-1
sdk/lib/crt/crt.cmake
··· 23 23 24 24 list(APPEND CRT_ASM_SOURCE 25 25 ${CRT_EXCEPT_ASM_SOURCE} 26 - ${CRT_SETJMP_ASM_SOURCE} 27 26 ${CRT_STDLIB_ASM_SOURCE} 28 27 ${CRT_STRING_ASM_SOURCE} 29 28 ${CRT_WINE_ASM_SOURCE}
-1
sdk/lib/crt/libcntpr.cmake
··· 18 18 ${LIBCNTPR_FLOAT_ASM_SOURCE} 19 19 ${LIBCNTPR_MATH_ASM_SOURCE} 20 20 ${LIBCNTPR_MEM_ASM_SOURCE} 21 - ${LIBCNTPR_SETJMP_ASM_SOURCE} 22 21 ${LIBCNTPR_STRING_ASM_SOURCE} 23 22 ) 24 23
-169
sdk/lib/crt/setjmp/amd64/setjmp.s
··· 1 - /* 2 - * COPYRIGHT: See COPYING in the top level directory 3 - * PROJECT: ReactOS system libraries 4 - * PURPOSE: Implementation of _setjmp/longjmp 5 - * FILE: lib/sdk/crt/setjmp/amd64/setjmp.s 6 - * PROGRAMMER: Timo Kreuzer (timo.kreuzer@reactos.org) 7 - */ 8 - 9 - /* INCLUDES ******************************************************************/ 10 - 11 - #include <asm.inc> 12 - #include <ksamd64.inc> 13 - 14 - #define JUMP_BUFFER_Frame 0 /* 0x00 */ 15 - #define JUMP_BUFFER_Rbx 8 /* 0x08 */ 16 - #define JUMP_BUFFER_Rsp 16 /* 0x10 */ 17 - #define JUMP_BUFFER_Rbp 24 /* 0x18 */ 18 - #define JUMP_BUFFER_Rsi 32 /* 0x20 */ 19 - #define JUMP_BUFFER_Rdi 40 /* 0x28 */ 20 - #define JUMP_BUFFER_R12 48 /* 0x30 */ 21 - #define JUMP_BUFFER_R13 56 /* 0x38 */ 22 - #define JUMP_BUFFER_R14 64 /* 0x40 */ 23 - #define JUMP_BUFFER_R15 72 /* 0x48 */ 24 - #define JUMP_BUFFER_Rip 80 /* 0x50 */ 25 - #define JUMP_BUFFER_Spare 88 /* 0x58 */ 26 - #define JUMP_BUFFER_Xmm6 96 /* 0x60 */ 27 - #define JUMP_BUFFER_Xmm7 112 /* 0x70 */ 28 - #define JUMP_BUFFER_Xmm8 128 /* 0x80 */ 29 - #define JUMP_BUFFER_Xmm9 144 /* 0x90 */ 30 - #define JUMP_BUFFER_Xmm10 160 /* 0xa0 */ 31 - #define JUMP_BUFFER_Xmm11 176 /* 0xb0 */ 32 - #define JUMP_BUFFER_Xmm12 192 /* 0xc0 */ 33 - #define JUMP_BUFFER_Xmm13 208 /* 0xd0 */ 34 - #define JUMP_BUFFER_Xmm14 224 /* 0xe0 */ 35 - #define JUMP_BUFFER_Xmm15 240 /* 0xf0 */ 36 - 37 - 38 - /* FUNCTIONS ******************************************************************/ 39 - .code64 40 - 41 - /*! 42 - * int _setjmp(jmp_buf env); 43 - * 44 - * \param <rcx> - jmp_buf env 45 - * \return 0 46 - * \note Sets up the jmp_buf 47 - */ 48 - PUBLIC _setjmp 49 - FUNC _setjmp 50 - 51 - .endprolog 52 - 53 - /* Load rsp as it was before the call into rax */ 54 - lea rax, [rsp + 8] 55 - /* Load return address into r8 */ 56 - mov r8, [rsp] 57 - mov qword ptr [rcx + JUMP_BUFFER_Frame], 0 58 - mov [rcx + JUMP_BUFFER_Rbx], rbx 59 - mov [rcx + JUMP_BUFFER_Rbp], rbp 60 - mov [rcx + JUMP_BUFFER_Rsi], rsi 61 - mov [rcx + JUMP_BUFFER_Rdi], rdi 62 - mov [rcx + JUMP_BUFFER_R12], r12 63 - mov [rcx + JUMP_BUFFER_R13], r13 64 - mov [rcx + JUMP_BUFFER_R14], r14 65 - mov [rcx + JUMP_BUFFER_R15], r15 66 - mov [rcx + JUMP_BUFFER_Rsp], rax 67 - mov [rcx + JUMP_BUFFER_Rip], r8 68 - movdqa [rcx + JUMP_BUFFER_Xmm6], xmm6 69 - movdqa [rcx + JUMP_BUFFER_Xmm7], xmm7 70 - movdqa [rcx + JUMP_BUFFER_Xmm8], xmm8 71 - movdqa [rcx + JUMP_BUFFER_Xmm9], xmm9 72 - movdqa [rcx + JUMP_BUFFER_Xmm10], xmm10 73 - movdqa [rcx + JUMP_BUFFER_Xmm11], xmm11 74 - movdqa [rcx + JUMP_BUFFER_Xmm12], xmm12 75 - movdqa [rcx + JUMP_BUFFER_Xmm13], xmm13 76 - movdqa [rcx + JUMP_BUFFER_Xmm14], xmm14 77 - movdqa [rcx + JUMP_BUFFER_Xmm15], xmm15 78 - xor rax, rax 79 - ret 80 - ENDFUNC 81 - 82 - /*! 83 - * int _setjmpex(jmp_buf _Buf,void *_Ctx); 84 - * 85 - * \param <rcx> - jmp_buf env 86 - * \param <rdx> - frame 87 - * \return 0 88 - * \note Sets up the jmp_buf 89 - */ 90 - PUBLIC _setjmpex 91 - FUNC _setjmpex 92 - 93 - .endprolog 94 - 95 - /* Load rsp as it was before the call into rax */ 96 - lea rax, [rsp + 8] 97 - /* Load return address into r8 */ 98 - mov r8, [rsp] 99 - mov [rcx + JUMP_BUFFER_Frame], rdx 100 - mov [rcx + JUMP_BUFFER_Rbx], rbx 101 - mov [rcx + JUMP_BUFFER_Rbp], rbp 102 - mov [rcx + JUMP_BUFFER_Rsi], rsi 103 - mov [rcx + JUMP_BUFFER_Rdi], rdi 104 - mov [rcx + JUMP_BUFFER_R12], r12 105 - mov [rcx + JUMP_BUFFER_R13], r13 106 - mov [rcx + JUMP_BUFFER_R14], r14 107 - mov [rcx + JUMP_BUFFER_R15], r15 108 - mov [rcx + JUMP_BUFFER_Rsp], rax 109 - mov [rcx + JUMP_BUFFER_Rip], r8 110 - movdqa [rcx + JUMP_BUFFER_Xmm6], xmm6 111 - movdqa [rcx + JUMP_BUFFER_Xmm7], xmm7 112 - movdqa [rcx + JUMP_BUFFER_Xmm8], xmm8 113 - movdqa [rcx + JUMP_BUFFER_Xmm9], xmm9 114 - movdqa [rcx + JUMP_BUFFER_Xmm10], xmm10 115 - movdqa [rcx + JUMP_BUFFER_Xmm11], xmm11 116 - movdqa [rcx + JUMP_BUFFER_Xmm12], xmm12 117 - movdqa [rcx + JUMP_BUFFER_Xmm13], xmm13 118 - movdqa [rcx + JUMP_BUFFER_Xmm14], xmm14 119 - movdqa [rcx + JUMP_BUFFER_Xmm15], xmm15 120 - xor rax, rax 121 - ret 122 - ENDFUNC 123 - 124 - 125 - /*! 126 - * void longjmp(jmp_buf env, int value); 127 - * 128 - * \param <rcx> - jmp_buf setup by _setjmp 129 - * \param <rdx> - int value to return 130 - * \return Doesn't return 131 - * \note Non-local goto 132 - */ 133 - PUBLIC longjmp 134 - FUNC longjmp 135 - 136 - .endprolog 137 - 138 - // FIXME: handle frame 139 - 140 - mov rbx, [rcx + JUMP_BUFFER_Rbx] 141 - mov rbp, [rcx + JUMP_BUFFER_Rbp] 142 - mov rsi, [rcx + JUMP_BUFFER_Rsi] 143 - mov rdi, [rcx + JUMP_BUFFER_Rdi] 144 - mov r12, [rcx + JUMP_BUFFER_R12] 145 - mov r13, [rcx + JUMP_BUFFER_R13] 146 - mov r14, [rcx + JUMP_BUFFER_R14] 147 - mov r15, [rcx + JUMP_BUFFER_R15] 148 - mov rsp, [rcx + JUMP_BUFFER_Rsp] 149 - mov r8, [rcx + JUMP_BUFFER_Rip] 150 - movdqa xmm6, [rcx + JUMP_BUFFER_Xmm6] 151 - movdqa xmm7, [rcx + JUMP_BUFFER_Xmm7] 152 - movdqa xmm8, [rcx + JUMP_BUFFER_Xmm8] 153 - movdqa xmm9, [rcx + JUMP_BUFFER_Xmm9] 154 - movdqa xmm10, [rcx + JUMP_BUFFER_Xmm10] 155 - movdqa xmm11, [rcx + JUMP_BUFFER_Xmm11] 156 - movdqa xmm12, [rcx + JUMP_BUFFER_Xmm12] 157 - movdqa xmm13, [rcx + JUMP_BUFFER_Xmm13] 158 - movdqa xmm14, [rcx + JUMP_BUFFER_Xmm14] 159 - movdqa xmm15, [rcx + JUMP_BUFFER_Xmm15] 160 - 161 - /* return param2 or 1 if it was 0 */ 162 - mov rax, rdx 163 - test rax, rax 164 - jnz l2 165 - inc rax 166 - l2: jmp r8 167 - ENDFUNC 168 - 169 - END
-64
sdk/lib/crt/setjmp/arm/setjmp.s
··· 1 - /* 2 - * COPYRIGHT: BSD - See COPYING.ARM in the top level directory 3 - * PROJECT: ReactOS CRT library 4 - * PURPOSE: Implementation of _setjmp / longjmp 5 - * PROGRAMMER: Timo Kreuzer (timo.kreuzer@reactos.org) 6 - */ 7 - 8 - /* INCLUDES ******************************************************************/ 9 - 10 - #include <kxarm.h> 11 - 12 - /* CODE **********************************************************************/ 13 - TEXTAREA 14 - 15 - LEAF_ENTRY _setjmpex 16 - 17 - /* Store r1 (->Frame) and r4 - r11 */ 18 - stmia r0!, {r1,r4-r11} 19 - 20 - /* Store sp (->Sp), lr (->Pc), fp (->Fpscr) */ 21 - mov r1, sp 22 - stmia r0!, {r1,lr,fp} 23 - 24 - /* Store NEON registers */ 25 - vst1.64 {d0}, [r0]! 26 - vst1.64 {d1}, [r0]! 27 - vst1.64 {d2}, [r0]! 28 - vst1.64 {d3}, [r0]! 29 - vst1.64 {d4}, [r0]! 30 - vst1.64 {d5}, [r0]! 31 - vst1.64 {d6}, [r0]! 32 - vst1.64 {d7}, [r0]! 33 - 34 - /* Return 0 */ 35 - mov r0, #0 36 - bx lr 37 - LEAF_END _setjmpex 38 - 39 - IMPORT _setjmp, WEAK _setjmpex 40 - IMPORT setjmp, WEAK _setjmpex 41 - 42 - LEAF_ENTRY longjmp 43 - 44 - ldmia r0!, {r1,r4-r11} 45 - ldmia r0!, {r1,lr,fp} 46 - mov sp, r1 47 - 48 - /* Load NEON registers */ 49 - vld1.64 {d0}, [r0]! 50 - vld1.64 {d1}, [r0]! 51 - vld1.64 {d2}, [r0]! 52 - vld1.64 {d3}, [r0]! 53 - vld1.64 {d4}, [r0]! 54 - vld1.64 {d5}, [r0]! 55 - vld1.64 {d6}, [r0]! 56 - vld1.64 {d7}, [r0]! 57 - 58 - /* Return 1 */ 59 - mov r0, #1 60 - bx lr 61 - LEAF_END longjmp 62 - 63 - END 64 - /* EOF */
-113
sdk/lib/crt/setjmp/i386/setjmp.s
··· 1 - /* 2 - * COPYRIGHT: See COPYING in the top level directory 3 - * PROJECT: ReactOS system libraries 4 - * PURPOSE: Implementation of _setjmp/longjmp 5 - * FILE: lib/sdk/crt/setjmp/i386/setjmp.s 6 - * PROGRAMMER: Ge van Geldorp (ge@gse.nl) 7 - * NOTES: Implementation is not complete, see Wine source for a more 8 - * complete implementation 9 - */ 10 - 11 - #include <asm.inc> 12 - 13 - #define JB_BP 0 14 - #define JB_BX 1 15 - #define JB_DI 2 16 - #define JB_SI 3 17 - #define JB_SP 4 18 - #define JB_IP 5 19 - 20 - #define PCOFF 0 21 - 22 - #define JMPBUF 4 23 - 24 - .code 25 - /* 26 - * int 27 - * _setjmp(jmp_buf env); 28 - * 29 - * Parameters: 30 - * [ESP+04h] - jmp_buf env 31 - * Registers: 32 - * None 33 - * Returns: 34 - * 0 35 - * Notes: 36 - * Sets up the jmp_buf 37 - */ 38 - PUBLIC __setjmp 39 - __setjmp: 40 - xor eax, eax 41 - mov edx, JMPBUF[esp] 42 - 43 - /* Save registers. */ 44 - mov [edx + JB_BP*4], ebp /* Save caller's frame pointer. */ 45 - mov [edx + JB_BX*4], ebx 46 - mov [edx + JB_DI*4], edi 47 - mov [edx + JB_SI*4], esi 48 - lea ecx, JMPBUF[esp] /* Save SP as it will be after we return. */ 49 - mov [edx + JB_SP*4], ecx 50 - mov ecx, PCOFF[esp] /* Save PC we are returning to now. */ 51 - mov [edx + JB_IP*4], ecx 52 - ret 53 - 54 - /* 55 - * int 56 - * _setjmp3(jmp_buf env, int nb_args, ...); 57 - * 58 - * Parameters: 59 - * [ESP+04h] - jmp_buf env 60 - * Registers: 61 - * None 62 - * Returns: 63 - * 0 64 - * Notes: 65 - * Sets up the jmp_buf 66 - */ 67 - PUBLIC __setjmp3 68 - __setjmp3: 69 - xor eax, eax 70 - mov edx, JMPBUF[esp] 71 - 72 - /* Save registers. */ 73 - mov [edx + JB_BP*4], ebp /* Save caller's frame pointer. */ 74 - mov [edx + JB_BX*4], ebx 75 - mov [edx + JB_DI*4], edi 76 - mov [edx + JB_SI*4], esi 77 - lea ecx, JMPBUF[esp] /* Save SP as it will be after we return. */ 78 - mov [edx + JB_SP*4], ecx 79 - mov ecx, PCOFF[esp] /* Save PC we are returning to now. */ 80 - mov [edx + JB_IP*4], ecx 81 - ret 82 - 83 - /* 84 - * void 85 - * longjmp(jmp_buf env, int value); 86 - * 87 - * Parameters: 88 - * [ESP+04h] - jmp_buf setup by _setjmp 89 - * [ESP+08h] - int value to return 90 - * Registers: 91 - * None 92 - * Returns: 93 - * Doesn't return 94 - * Notes: 95 - * Non-local goto 96 - */ 97 - PUBLIC _longjmp 98 - _longjmp: 99 - mov ecx, JMPBUF[esp] /* User's jmp_buf in %ecx. */ 100 - 101 - mov eax, [esp + 8] /* Second argument is return value. */ 102 - /* Save the return address now. */ 103 - mov edx, [ecx + JB_IP*4] 104 - /* Restore registers. */ 105 - mov ebp, [ecx + JB_BP*4] 106 - mov ebx, [ecx + JB_BX*4] 107 - mov edi, [ecx + JB_DI*4] 108 - mov esi, [ecx + JB_SI*4] 109 - mov esp, [ecx + JB_SP*4] 110 - /* Jump to saved PC. */ 111 - jmp edx 112 - 113 - END
-18
sdk/lib/crt/setjmp/setjmp.cmake
··· 1 - 2 - if(ARCH STREQUAL "i386") 3 - list(APPEND LIBCNTPR_SETJMP_ASM_SOURCE 4 - setjmp/i386/setjmp.s 5 - ) 6 - elseif(ARCH STREQUAL "amd64") 7 - list(APPEND LIBCNTPR_SETJMP_ASM_SOURCE 8 - setjmp/amd64/setjmp.s 9 - ) 10 - elseif(ARCH STREQUAL "arm") 11 - list(APPEND LIBCNTPR_SETJMP_ASM_SOURCE 12 - setjmp/arm/setjmp.s 13 - ) 14 - endif() 15 - 16 - list(APPEND CRT_SETJMP_ASM_SOURCE 17 - ${LIBCNTPR_SETJMP_ASM_SOURCE} 18 - )