1 #ifdef _MSC_VER 2 #include "vacall_r.h" 3 #endif 4 #include "asm-i386.h" 5 TEXT() 6 ALIGN(2) 7 P2ALIGN(2,3) DECLARE_FUNCTION(callback_receiver)8 DECLARE_FUNCTION(callback_receiver) 9 FUNBEGIN(callback_receiver) 10 INSN1(push,l ,R(ebp)) 11 INSN2(mov,l ,R(esp), R(ebp)) 12 INSN1(push,l ,R(edi)) 13 INSN1(push,l ,R(esi)) 14 INSN2(lea,l ,X4 MEM_DISP(ebp,8), R(edx)) 15 INSN2(sub,l ,NUM(56), R(esp)) 16 INSN2(mov,l ,R(edx),X4 MEM_DISP(ebp,-40)) 17 INSN2(lea,l ,X4 MEM_DISP(ebp,-56), R(edx)) 18 INSN2(mov,l ,NUM(0),X4 MEM_DISP(ebp,-56)) 19 INSN2(mov,l ,NUM(0),X4 MEM_DISP(ebp,-36)) 20 INSN2(mov,l ,NUM(0),X4 MEM_DISP(ebp,-32)) 21 INSN2(mov,l ,R(ebx),X4 MEM_DISP(ebp,-24)) 22 INSN1(push,l ,R(edx)) 23 INSN1(push,l ,X4 MEM_DISP(ecx,4)) 24 INSN1(call,_ ,INDIR(X4 MEM(ecx))) 25 INSN2(mov,l ,X4 MEM_DISP(ebp,-32), R(esi)) 26 INSN2(add,l ,NUM(16), R(esp)) 27 INSN2(test,l ,R(esi), R(esi)) 28 INSN1(je,_ ,L(43)) 29 INSN2(cmp,l ,NUM(1), R(esi)) 30 INSN1(je,_ ,L(44)) 31 INSN2(cmp,l ,NUM(2), R(esi)) 32 INSN1(je,_ ,L(44)) 33 INSN2(cmp,l ,NUM(3), R(esi)) 34 INSN1(je,_ ,L(49)) 35 INSN2(cmp,l ,NUM(4), R(esi)) 36 INSN1(je,_ ,L(50)) 37 INSN2(cmp,l ,NUM(5), R(esi)) 38 INSN1(je,_ ,L(51)) 39 INSN2(cmp,l ,NUM(6), R(esi)) 40 INSN1(je,_ ,L(48)) 41 INSN2(cmp,l ,NUM(7), R(esi)) 42 INSN1(je,_ ,L(48)) 43 INSN2(cmp,l ,NUM(8), R(esi)) 44 INSN1(je,_ ,L(48)) 45 INSN2(cmp,l ,NUM(9), R(esi)) 46 INSN1(je,_ ,L(48)) 47 INSN2(lea,l ,X4 MEM_DISP(esi,-10), R(edx)) 48 INSN2(cmp,l ,NUM(1), R(edx)) 49 INSN1(ja,_ ,L(22)) 50 INSN2(mov,l ,X4 MEM_DISP(ebp,-48), R(eax)) 51 INSN2(mov,l ,X4 MEM_DISP(ebp,-44),R(edx)) 52 L(33): 53 P2ALIGN(2,3) 54 L(43): 55 INSN2(mov,l ,X4 MEM_DISP(ebp,-56), R(esi)) 56 L(3): 57 INSN2(and,l ,NUM(512), R(esi)) 58 INSN1(je,_ ,L(1)) 59 INSN2(mov,l ,X4 MEM_DISP(ebp,0),R(ecx)) 60 INSN2(mov,l ,X4 MEM_DISP(ebp,-40), R(esp)) 61 INSN1(jmp,_ ,INDIR(R(ecx))) 62 L(1): 63 INSN2(lea,l ,X4 MEM_DISP(ebp,-8), R(esp)) 64 INSN1(pop,l ,R(esi)) 65 INSN1(pop,l ,R(edi)) 66 leave 67 ret 68 L(22): 69 INSN2(cmp,l ,NUM(12), R(esi)) 70 INSN1(je,_ ,L(52)) 71 INSN2(cmp,l ,NUM(13), R(esi)) 72 INSN1(je,_ ,L(53)) 73 INSN2(cmp,l ,NUM(14), R(esi)) 74 INSN1(je,_ ,L(48)) 75 INSN2(cmp,l ,NUM(15), R(esi)) 76 INSN1(jne,_ ,L(43)) 77 INSN2(mov,l ,X4 MEM_DISP(ebp,-56), R(esi)) 78 INSN2(test,l ,NUM(1024), R(esi)) 79 INSN2(mov,l ,R(esi), R(edi)) 80 INSN1(je,_ ,L(31)) 81 INSN2(mov,l ,X4 MEM_DISP(ebp,-28), R(edx)) 82 INSN2(cmp,l ,NUM(1), R(edx)) 83 INSN1(je,_ ,L(54)) 84 INSN2(cmp,l ,NUM(2), R(edx)) 85 INSN1(je,_ ,L(55)) 86 INSN2(cmp,l ,NUM(4), R(edx)) 87 INSN1(je,_ ,L(56)) 88 INSN2(cmp,l ,NUM(8), R(edx)) 89 INSN1(je,_ ,L(57)) 90 L(31): 91 INSN2(and,l ,NUM(16), R(edi)) 92 INSN2(mov,l ,X4 MEM_DISP(ebp,-36), R(eax)) 93 INSN1(jne,_ ,L(3)) 94 INSN2(lea,l ,X4 MEM_DISP(ebp,-8), R(esp)) 95 INSN1(pop,l ,R(esi)) 96 INSN1(pop,l ,R(edi)) 97 leave 98 ret NUM(4) 99 INSN1(jmp,_ ,L(3)) 100 L(57): 101 INSN2(mov,l ,X4 MEM_DISP(ebp,-36), R(edx)) 102 INSN2(mov,l ,X4 MEM(edx), R(eax)) 103 INSN2(mov,l ,X4 MEM_DISP(edx,4),R(edx)) 104 INSN1(jmp,_ ,L(3)) 105 L(56): 106 INSN2(mov,l ,X4 MEM_DISP(ebp,-36), R(edx)) 107 INSN2(mov,l ,X4 MEM(edx), R(eax)) 108 INSN1(jmp,_ ,L(3)) 109 L(55): 110 INSN2(mov,l ,X4 MEM_DISP(ebp,-36), R(edx)) 111 INSN2MOVXL(movz,w,X2 MEM(edx), R(eax)) 112 INSN1(jmp,_ ,L(3)) 113 L(54): 114 INSN2(mov,l ,X4 MEM_DISP(ebp,-36), R(edx)) 115 INSN2MOVXL(movz,b,X1 MEM(edx), R(eax)) 116 INSN1(jmp,_ ,L(3)) 117 P2ALIGN(2,3) 118 L(48): 119 INSN2(mov,l ,X4 MEM_DISP(ebp,-48), R(eax)) 120 INSN1(jmp,_ ,L(43)) 121 L(53): 122 INSN1(fld,l ,X8 MEM_DISP(ebp,-48)) 123 INSN1(jmp,_ ,L(43)) 124 L(52): 125 INSN1(fld,s ,X4 MEM_DISP(ebp,-48)) 126 INSN1(jmp,_ ,L(43)) 127 P2ALIGN(2,3) 128 L(51): 129 INSN2MOVXL(movz,w,X2 MEM_DISP(ebp,-48), R(eax)) 130 INSN1(jmp,_ ,L(43)) 131 L(50): 132 INSN2MOVXL(movs,w,X2 MEM_DISP(ebp,-48),R(eax)) 133 INSN1(jmp,_ ,L(43)) 134 L(49): 135 INSN2MOVXL(movz,b,X1 MEM_DISP(ebp,-48), R(eax)) 136 INSN1(jmp,_ ,L(43)) 137 P2ALIGN(2,3) 138 L(44): 139 INSN2MOVXL(movs,b,X1 MEM_DISP(ebp,-48),R(eax)) 140 INSN1(jmp,_ ,L(43)) 141 L(fe1): 142 FUNEND(callback_receiver,L(fe1)-callback_receiver) 143 /* Implementation of callback_get_receiver */ 144 145 /* 146 * Copyright 2017 Bruno Haible <bruno@clisp.org> 147 * 148 * This program is free software: you can redistribute it and/or modify 149 * it under the terms of the GNU General Public License as published by 150 * the Free Software Foundation; either version 2 of the License, or 151 * (at your option) any later version. 152 * 153 * This program is distributed in the hope that it will be useful, 154 * but WITHOUT ANY WARRANTY; without even the implied warranty of 155 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 156 * GNU General Public License for more details. 157 * 158 * You should have received a copy of the GNU General Public License 159 * along with this program. If not, see <https://www.gnu.org/licenses/>. 160 */ 161 162 __vacall_r_t 163 callback_get_receiver (void) 164 { 165 return (__vacall_r_t)(void*)&callback_receiver; 166 } 167