Bug in vop code
Andrew Sengul <[email protected]>
| Newsgroups | gmane.lisp.steel-bank.general |
|---|---|
| Message-ID | <[email protected]> |
Hi everyone, I'm running into some bugs with vop code. I'm attempting to add an integer to a quadword register but I get an error message informing me that the integer is too big to fit into 32 bits. This shouldn't be a problem since I'm specifying the use of a quadword register with :qword, but something is going wrong regardless. Does anyone have an idea what could be going on? Thanks. The error: The value 12884901888 is not of type (SIGNED-BYTE 32) The code, with a comment at the relevant line: (sb-c:define-vop (varray::vop-ph) (:policy :fast-safe) (:translate varray::vop-ph) (:args (varray::st-arg :scs (sb-vm::unsigned-reg)) (varray::ct-arg :scs (sb-vm::unsigned-reg)) (varray::ia-arg :scs (sb-vm::unsigned-reg)) (varray::oa-arg :scs (sb-vm::unsigned-reg))) (:arg-types sb-vm::unsigned-num sb-vm::unsigned-num sb-vm::unsigned-num sb-vm::unsigned-num) (:temporary (:sc sb-vm::unsigned-reg :from :eval :offset sb-vm::rax-offset) varray::ra) (:temporary (:sc sb-vm::unsigned-reg :from :eval) varray::rc) (:temporary (:sc sb-vm::unsigned-reg :from :eval :offset sb-vm::rdx-offset) varray::rd) (:temporary (:sc sb-vm::unsigned-reg :from :eval) varray::rb) (:temporary (:sc sb-vm::unsigned-reg :from :eval) varray::r5) (:temporary (:sc sb-vm::unsigned-reg :from :eval) varray::ia) (:temporary (:sc sb-vm::unsigned-reg :from :eval) varray::aec) (:temporary (:sc sb-vm::unsigned-reg :from :eval) varray::pt) (:temporary (:sc sb-vm::unsigned-reg :from :eval) varray::ct) (:temporary (:sc sb-vm::unsigned-reg :from :eval) varray::sgs) (:temporary (:sc sb-vm::unsigned-reg :from :eval) varray::sgi) (:temporary (:sc sb-vm::single-avx2-reg :from :eval) varray::sec) (:generator 1 (sb-assem:inst varray::mov :qword varray::pt varray::st-arg) (sb-assem:inst varray::mov :qword varray::ct varray::ct-arg) (sb-assem:inst varray::mov :qword varray::ia varray::ia-arg) (sb-assem:inst varray::mov :qword varray::sgi varray::oa-arg) (sb-assem:inst varray::mov :qword varray::ra varray::pt) (sb-assem:inst varray::xor :qword varray::rd varray::rd) (sb-assem:inst varray::xor :qword varray::rb varray::rb) (sb-assem:inst varray::mov :qword varray::rc 1908) (sb-assem:inst varray::div :qword varray::rc) (sb-assem:inst varray::add :qword varray::rb varray::ra) (sb-assem:inst varray::shl :qword varray::rb 16) (sb-assem:inst varray::mov :qword varray::ra varray::rd) (sb-assem:inst varray::xor :qword varray::rd varray::rd) (sb-assem:inst varray::mov :qword varray::rc 3) (sb-assem:inst varray::div :qword varray::rc) (sb-assem:inst varray::add :qword varray::rb varray::ra) (sb-assem:inst varray::shl :qword varray::rb 16) (sb-assem:inst varray::add :qword varray::rb varray::rd) (sb-assem:inst varray::add :qword varray::ct varray::pt) (sb-assem:inst varray::movq varray::sec varray::rb) (sb-assem:inst varray::mov :qword varray::aec varray::rb) (sb-assem:inst varray::add :qword varray::ct varray::sgi) (sb-assem:inst varray::add :qword varray::pt varray::sgi) (sb-assem:inst varray::xor :qword varray::sgi varray::sgi) (sb-assem:inst varray::jmp varray::start-loop) varray::start-loop-incrementing (sb-assem:inst varray::inc :word varray::aec) (sb-assem:inst varray::cmp :word varray::aec 3) (sb-assem:inst varray::jmp :b varray::iterated) (sb-assem:inst varray::xor :word varray::aec varray::aec) (sb-assem:inst varray::add :qword varray::aec 65536) (sb-assem:inst varray::cmp :dword varray::aec 41680896) (sb-assem:inst varray::jmp :b varray::iterated) (sb-assem:inst varray::xor :dword varray::aec varray::aec) (sb-assem:inst varray::mov :qword varray::rc 4294967296) (sb-assem:inst varray::add :qword varray::aec varray::rc) varray::iterated (sb-assem:inst varray::movq varray::sec varray::aec) varray::start-loop (sb-assem:inst varray::add :qword varray::aec 12884901888) ;; problem happens here (sb-assem:inst varray::cmp :qword varray::aec 1705102016512) (sb-assem:inst varray::jmp :b #:g234508) (sb-assem:inst varray::sub :qword varray::aec 1705102016512) #:g234508 (sb-assem:inst varray::xor :qword varray::rb varray::rb) (sb-assem:inst varray::add :word varray::rb varray::aec) (sb-assem:inst varray::shr :qword varray::aec 16) (sb-assem:inst varray::xor :qword varray::ra varray::ra) (sb-assem:inst varray::mov :word varray::ra varray::aec) (sb-assem:inst varray::xor :qword varray::rd varray::rd) (sb-assem:inst varray::mov :qword varray::rc 3) (sb-assem:inst varray::mul :qword varray::rc) (sb-assem:inst varray::add :qword varray::rb varray::ra) (sb-assem:inst varray::shr :qword varray::aec 16) (sb-assem:inst varray::xor :qword varray::ra varray::ra) (sb-assem:inst varray::mov :word varray::ra varray::aec) (sb-assem:inst varray::xor :qword varray::rd varray::rd) (sb-assem:inst varray::mov :qword varray::rc 1908) (sb-assem:inst varray::mul :qword varray::rc) (sb-assem:inst varray::add :qword varray::rb varray::ra) (sb-assem:inst varray::add :qword varray::rb varray::ia) (sb-assem:inst varray::mov :byte varray::ra (sb-x86-64-asm::ea varray::rb)) (sb-assem:inst varray::mov :byte (sb-x86-64-asm::ea varray::pt) varray::ra) (sb-assem:inst varray::inc :qword varray::pt) varray::transfer-cycle-complete (sb-assem:inst varray::movq varray::aec varray::sec) (sb-assem:inst varray::cmp :qword varray::pt varray::ct) (sb-assem:inst varray::jmp :b varray::start-loop-incrementing)))