MCPcopy Create free account
hub / github.com/WheretIB/nullc / GenCodeCmdReturn

Function GenCodeCmdReturn

NULLC/CodeGen_X86.cpp:2201–2300  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2199void (*yieldPtr)() = yieldSaveEIP;
2200
2201void 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);

Callers

nothing calls this directly

Calls 10

EMIT_COMMENTFunction · 0.85
EMIT_OP_NUMFunction · 0.85
EMIT_OP_RPTRFunction · 0.85
EMIT_OP_REG_NUMFunction · 0.85
EMIT_OP_REG_REGFunction · 0.85
EMIT_OP_REGFunction · 0.85
EMIT_REG_READFunction · 0.85
EMIT_OP_REG_RPTRFunction · 0.85
EMIT_OPFunction · 0.85
EMIT_OP_RPTR_NUMFunction · 0.85

Tested by

no test coverage detected