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)))
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.