184185186187188189190191192193194
break; case SLONGLONG: case ULONGLONG: a.mov(dword_ptr(esp, save), eax); a.mov(dword_ptr(esp, save + 4), edx); break; case VOID: // No need to save for void values break;
192193194195196197198199200201202
case VOID: // No need to save for void values break; default: a.mov(dword_ptr(esp, save), eax); } // Save the errno in a thread-local variable a.call(imm(errnoFunctionAddress & 0xffffffffL));
226227228229230231232233234235236
a.movzx(eax, word_ptr(esp, save)); break; case SLONGLONG: case ULONGLONG: a.mov(eax, dword_ptr(esp, save)); a.mov(edx, dword_ptr(esp, save + 4)); break; case VOID: // No need to save for void values
227228229230231232233234235236237
break; case SLONGLONG: case ULONGLONG: a.mov(eax, dword_ptr(esp, save)); a.mov(edx, dword_ptr(esp, save + 4)); break; case VOID: // No need to save for void values break;
235236237238239240241242243244245
case VOID: // No need to save for void values break; default: a.mov(eax, dword_ptr(esp, save)); } } else { switch (resultType.getNativeType()) {
267268269270271272273274275276277
case SCHAR: case SSHORT: case SINT: case SLONG: // sign extend eax to edx:eax a.mov(edx, eax); a.sar(edx, imm(31)); break; case UCHAR: case USHORT:
276277278279280281282283284285286
case UCHAR: case USHORT: case UINT: case ULONG: case ADDRESS: a.mov(edx, imm(0)); break; } } // Restore esp to the original position and return
173174175176177178179180181182183
a.movsxd(dstRegisters64[i], srcRegisters32[i]); break; case UINT: // mov with a 32bit dst reg zero extends to 64bit a.mov(dstRegisters32[i], srcRegisters32[i]); break; default: a.mov(dstRegisters64[i], srcRegisters64[i]); break;
177178179180181182183184185186187
// mov with a 32bit dst reg zero extends to 64bit a.mov(dstRegisters32[i], srcRegisters32[i]); break; default: a.mov(dstRegisters64[i], srcRegisters64[i]); break; } } if (iCount > 6) {
212213214215216217218219220221222
a.movsxd(dstRegisters64[i], dword_ptr(rsp, disp)); break; case UINT: // mov with a 32bit dst reg zero extends to 64bit a.mov(dstRegisters32[i], dword_ptr(rsp, disp)); break; default: a.mov(dstRegisters64[i], qword_ptr(rsp, disp)); break;