fixed #1491
This commit is contained in:
parent
7ef076a04a
commit
5b326269c3
1 changed files with 17 additions and 11 deletions
|
|
@ -114,63 +114,69 @@ when asmVersion and not defined(gcc) and not defined(llvm_gcc):
|
||||||
proc addInt(a, b: int): int {.compilerProc, asmNoStackFrame.} =
|
proc addInt(a, b: int): int {.compilerProc, asmNoStackFrame.} =
|
||||||
# a in eax, and b in edx
|
# a in eax, and b in edx
|
||||||
asm """
|
asm """
|
||||||
mov eax, `a`
|
mov eax, ecx
|
||||||
add eax, `b`
|
add eax, edx
|
||||||
jno theEnd
|
jno theEnd
|
||||||
call `raiseOverflow`
|
call `raiseOverflow`
|
||||||
theEnd:
|
theEnd:
|
||||||
|
ret
|
||||||
"""
|
"""
|
||||||
|
|
||||||
proc subInt(a, b: int): int {.compilerProc, asmNoStackFrame.} =
|
proc subInt(a, b: int): int {.compilerProc, asmNoStackFrame.} =
|
||||||
asm """
|
asm """
|
||||||
mov eax, `a`
|
mov eax, ecx
|
||||||
sub eax, `b`
|
sub eax, edx
|
||||||
jno theEnd
|
jno theEnd
|
||||||
call `raiseOverflow`
|
call `raiseOverflow`
|
||||||
theEnd:
|
theEnd:
|
||||||
|
ret
|
||||||
"""
|
"""
|
||||||
|
|
||||||
proc negInt(a: int): int {.compilerProc, asmNoStackFrame.} =
|
proc negInt(a: int): int {.compilerProc, asmNoStackFrame.} =
|
||||||
asm """
|
asm """
|
||||||
mov eax, `a`
|
mov eax, ecx
|
||||||
neg eax
|
neg eax
|
||||||
jno theEnd
|
jno theEnd
|
||||||
call `raiseOverflow`
|
call `raiseOverflow`
|
||||||
theEnd:
|
theEnd:
|
||||||
|
ret
|
||||||
"""
|
"""
|
||||||
|
|
||||||
proc divInt(a, b: int): int {.compilerProc, asmNoStackFrame.} =
|
proc divInt(a, b: int): int {.compilerProc, asmNoStackFrame.} =
|
||||||
asm """
|
asm """
|
||||||
mov eax, `a`
|
mov eax, ecx
|
||||||
mov ecx, `b`
|
mov ecx, edx
|
||||||
xor edx, edx
|
xor edx, edx
|
||||||
idiv ecx
|
idiv ecx
|
||||||
jno theEnd
|
jno theEnd
|
||||||
call `raiseOverflow`
|
call `raiseOverflow`
|
||||||
theEnd:
|
theEnd:
|
||||||
|
ret
|
||||||
"""
|
"""
|
||||||
|
|
||||||
proc modInt(a, b: int): int {.compilerProc, asmNoStackFrame.} =
|
proc modInt(a, b: int): int {.compilerProc, asmNoStackFrame.} =
|
||||||
asm """
|
asm """
|
||||||
mov eax, `a`
|
mov eax, ecx
|
||||||
mov ecx, `b`
|
mov ecx, edx
|
||||||
xor edx, edx
|
xor edx, edx
|
||||||
idiv ecx
|
idiv ecx
|
||||||
jno theEnd
|
jno theEnd
|
||||||
call `raiseOverflow`
|
call `raiseOverflow`
|
||||||
theEnd:
|
theEnd:
|
||||||
mov eax, edx
|
mov eax, edx
|
||||||
|
ret
|
||||||
"""
|
"""
|
||||||
|
|
||||||
proc mulInt(a, b: int): int {.compilerProc, asmNoStackFrame.} =
|
proc mulInt(a, b: int): int {.compilerProc, asmNoStackFrame.} =
|
||||||
asm """
|
asm """
|
||||||
mov eax, `a`
|
mov eax, ecx
|
||||||
mov ecx, `b`
|
mov ecx, edx
|
||||||
xor edx, edx
|
xor edx, edx
|
||||||
imul ecx
|
imul ecx
|
||||||
jno theEnd
|
jno theEnd
|
||||||
call `raiseOverflow`
|
call `raiseOverflow`
|
||||||
theEnd:
|
theEnd:
|
||||||
|
ret
|
||||||
"""
|
"""
|
||||||
|
|
||||||
elif false: # asmVersion and (defined(gcc) or defined(llvm_gcc)):
|
elif false: # asmVersion and (defined(gcc) or defined(llvm_gcc)):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue