| 2199 | void (*yieldPtr)() = yieldSaveEIP; |
| 2200 | |
| 2201 | void GenCodeCmdReturn(VMCmd cmd) |
| 2202 | { |
| 2203 | EMIT_COMMENT("RET"); |
| 2204 | |
| 2205 | if(cmd.flag & bitRetError) |
| 2206 | { |
| 2207 | #ifdef __linux |
| 2208 | // call siglongjmp(target_env, EXCEPTION_FUNCTION_NO_RETURN); |
| 2209 | EMIT_OP_NUM(o_push, EXCEPTION_FUNCTION_NO_RETURN); |
| 2210 | EMIT_OP_NUM(o_push, nullcJmpTarget); |
| 2211 | EMIT_OP_RPTR(o_call, sDWORD, rNONE, 1, rNONE, (unsigned)(intptr_t)&siglongjmpPtr); |
| 2212 | #else |
| 2213 | EMIT_OP_REG_NUM(o_mov, rECX, 0xffffffff); |
| 2214 | EMIT_OP_NUM(o_int, 3); |
| 2215 | #endif |
| 2216 | return; |
| 2217 | } |
| 2218 | if(cmd.argument == 0) |
| 2219 | { |
| 2220 | EMIT_OP_REG_REG(o_mov, rEDI, rEBP); |
| 2221 | EMIT_OP_REG(o_pop, rEBP); |
| 2222 | }else if(cmd.flag != OTYPE_COMPLEX){ |
| 2223 | if(cmd.flag == OTYPE_INT) |
| 2224 | { |
| 2225 | EMIT_OP_REG(o_pop, rEAX); |
| 2226 | EMIT_REG_READ(rEAX); |
| 2227 | }else{ |
| 2228 | EMIT_OP_REG(o_pop, rEDX); |
| 2229 | EMIT_OP_REG(o_pop, rEAX); |
| 2230 | EMIT_REG_READ(rEAX); |
| 2231 | EMIT_REG_READ(rEDX); |
| 2232 | } |
| 2233 | EMIT_OP_REG_REG(o_mov, rEDI, rEBP); |
| 2234 | EMIT_OP_REG(o_pop, rEBP); |
| 2235 | if(cmd.helper == 0) |
| 2236 | EMIT_OP_REG_NUM(o_mov, rEBX, cmd.flag); |
| 2237 | }else{ |
| 2238 | if(cmd.argument == 4) |
| 2239 | { |
| 2240 | EMIT_OP_REG(o_pop, rEAX); |
| 2241 | EMIT_REG_READ(rEAX); |
| 2242 | }else if(cmd.argument == 8){ |
| 2243 | EMIT_OP_REG(o_pop, rEDX); |
| 2244 | EMIT_OP_REG(o_pop, rEAX); |
| 2245 | EMIT_REG_READ(rEAX); |
| 2246 | EMIT_REG_READ(rEDX); |
| 2247 | }else if(cmd.argument == 12){ |
| 2248 | EMIT_OP_REG(o_pop, rECX); |
| 2249 | EMIT_OP_REG(o_pop, rEDX); |
| 2250 | EMIT_OP_REG(o_pop, rEAX); |
| 2251 | EMIT_REG_READ(rEAX); |
| 2252 | EMIT_REG_READ(rEDX); |
| 2253 | EMIT_REG_READ(rECX); |
| 2254 | }else if(cmd.argument == 16){ |
| 2255 | EMIT_OP_REG(o_pop, rEBX); |
| 2256 | EMIT_OP_REG(o_pop, rECX); |
| 2257 | EMIT_OP_REG(o_pop, rEDX); |
| 2258 | EMIT_OP_REG(o_pop, rEAX); |
nothing calls this directly
no test coverage detected