compiler-rt: add _aulldiv and _aullrem for i386 windows
parent
b7a4f16cc4
commit
9c6e12ac29
|
@ -563,6 +563,8 @@ install(FILES "${CMAKE_SOURCE_DIR}/std/special/bootstrap.zig" DESTINATION "${ZIG
|
|||
install(FILES "${CMAKE_SOURCE_DIR}/std/special/build_file_template.zig" DESTINATION "${ZIG_STD_DEST}/special")
|
||||
install(FILES "${CMAKE_SOURCE_DIR}/std/special/build_runner.zig" DESTINATION "${ZIG_STD_DEST}/special")
|
||||
install(FILES "${CMAKE_SOURCE_DIR}/std/special/builtin.zig" DESTINATION "${ZIG_STD_DEST}/special")
|
||||
install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/aulldiv.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
|
||||
install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/aullrem.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
|
||||
install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/comparetf2.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
|
||||
install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/fixuint.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
|
||||
install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/fixunsdfdi.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
|
||||
|
|
|
@ -0,0 +1,65 @@
|
|||
const builtin = @import("builtin");
|
||||
|
||||
export nakedcc fn _aulldiv() {
|
||||
@setDebugSafety(this, false);
|
||||
|
||||
if (comptime builtin.os == builtin.Os.windows) {
|
||||
if (comptime builtin.arch == builtin.Arch.i386) {
|
||||
asm volatile (
|
||||
\\.intel_syntax noprefix
|
||||
\\
|
||||
\\ push ebx
|
||||
\\ push esi
|
||||
\\ mov eax,dword ptr [esp+18h]
|
||||
\\ or eax,eax
|
||||
\\ jne L1
|
||||
\\ mov ecx,dword ptr [esp+14h]
|
||||
\\ mov eax,dword ptr [esp+10h]
|
||||
\\ xor edx,edx
|
||||
\\ div ecx
|
||||
\\ mov ebx,eax
|
||||
\\ mov eax,dword ptr [esp+0Ch]
|
||||
\\ div ecx
|
||||
\\ mov edx,ebx
|
||||
\\ jmp L2
|
||||
\\ L1:
|
||||
\\ mov ecx,eax
|
||||
\\ mov ebx,dword ptr [esp+14h]
|
||||
\\ mov edx,dword ptr [esp+10h]
|
||||
\\ mov eax,dword ptr [esp+0Ch]
|
||||
\\ L3:
|
||||
\\ shr ecx,1
|
||||
\\ rcr ebx,1
|
||||
\\ shr edx,1
|
||||
\\ rcr eax,1
|
||||
\\ or ecx,ecx
|
||||
\\ jne L3
|
||||
\\ div ebx
|
||||
\\ mov esi,eax
|
||||
\\ mul dword ptr [esp+18h]
|
||||
\\ mov ecx,eax
|
||||
\\ mov eax,dword ptr [esp+14h]
|
||||
\\ mul esi
|
||||
\\ add edx,ecx
|
||||
\\ jb L4
|
||||
\\ cmp edx,dword ptr [esp+10h]
|
||||
\\ ja L4
|
||||
\\ jb L5
|
||||
\\ cmp eax,dword ptr [esp+0Ch]
|
||||
\\ jbe L5
|
||||
\\ L4:
|
||||
\\ dec esi
|
||||
\\ L5:
|
||||
\\ xor edx,edx
|
||||
\\ mov eax,esi
|
||||
\\ L2:
|
||||
\\ pop esi
|
||||
\\ pop ebx
|
||||
\\ ret 10h
|
||||
);
|
||||
unreachable;
|
||||
}
|
||||
}
|
||||
|
||||
@setGlobalLinkage(_aulldiv, builtin.GlobalLinkage.Internal);
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
const builtin = @import("builtin");
|
||||
|
||||
export nakedcc fn _aullrem() {
|
||||
@setDebugSafety(this, false);
|
||||
|
||||
if (comptime builtin.os == builtin.Os.windows) {
|
||||
if (comptime builtin.arch == builtin.Arch.i386) {
|
||||
asm volatile (
|
||||
\\.intel_syntax noprefix
|
||||
\\
|
||||
\\ push ebx
|
||||
\\ mov eax,dword ptr [esp+14h]
|
||||
\\ or eax,eax
|
||||
\\ jne L1a
|
||||
\\ mov ecx,dword ptr [esp+10h]
|
||||
\\ mov eax,dword ptr [esp+0Ch]
|
||||
\\ xor edx,edx
|
||||
\\ div ecx
|
||||
\\ mov eax,dword ptr [esp+8]
|
||||
\\ div ecx
|
||||
\\ mov eax,edx
|
||||
\\ xor edx,edx
|
||||
\\ jmp L2a
|
||||
\\ L1a:
|
||||
\\ mov ecx,eax
|
||||
\\ mov ebx,dword ptr [esp+10h]
|
||||
\\ mov edx,dword ptr [esp+0Ch]
|
||||
\\ mov eax,dword ptr [esp+8]
|
||||
\\ L3a:
|
||||
\\ shr ecx,1
|
||||
\\ rcr ebx,1
|
||||
\\ shr edx,1
|
||||
\\ rcr eax,1
|
||||
\\ or ecx,ecx
|
||||
\\ jne L3a
|
||||
\\ div ebx
|
||||
\\ mov ecx,eax
|
||||
\\ mul dword ptr [esp+14h]
|
||||
\\ xchg eax,ecx
|
||||
\\ mul dword ptr [esp+10h]
|
||||
\\ add edx,ecx
|
||||
\\ jb L4a
|
||||
\\ cmp edx,dword ptr [esp+0Ch]
|
||||
\\ ja L4a
|
||||
\\ jb L5a
|
||||
\\ cmp eax,dword ptr [esp+8]
|
||||
\\ jbe L5a
|
||||
\\ L4a:
|
||||
\\ sub eax,dword ptr [esp+10h]
|
||||
\\ sbb edx,dword ptr [esp+14h]
|
||||
\\ L5a:
|
||||
\\ sub eax,dword ptr [esp+8]
|
||||
\\ sbb edx,dword ptr [esp+0Ch]
|
||||
\\ neg edx
|
||||
\\ neg eax
|
||||
\\ sbb edx,0
|
||||
\\ L2a:
|
||||
\\ pop ebx
|
||||
\\ ret 10h
|
||||
);
|
||||
unreachable;
|
||||
}
|
||||
}
|
||||
|
||||
@setGlobalLinkage(_aullrem, builtin.GlobalLinkage.Internal);
|
||||
}
|
|
@ -13,6 +13,8 @@ comptime {
|
|||
_ = @import("udivmodti4.zig");
|
||||
_ = @import("udivti3.zig");
|
||||
_ = @import("umodti3.zig");
|
||||
_ = @import("aulldiv.zig");
|
||||
_ = @import("aullrem.zig");
|
||||
}
|
||||
|
||||
const builtin = @import("builtin");
|
||||
|
|
Loading…
Reference in New Issue