Jump to content

The Answer Why There Is No Shalq In Gpu Instruction Set


Orion_

Recommended Posts

I had a problem with negative value using some gpu code, and I came to the conclusion that one of my routine didn't work, actually this was the GT Turbo's routine (not surprised ? ^^)

we complained about the missing shalq instruction in gpu instruction set, we have sharq, but not shalq, so why ?

because we simply don't need it ...

let's see, here is the GT Turbo's routine for SHALQ:

MACRO    SHALQ    a,b    ; by GT_Turbo
    shlq    \a,\b
    jr    NC,.pasign\~
    nop
    neg    \b
.pasign\~:
    ENDM

 

what shalq does ? it will shift the register to left, so let's take 2 numbers:

(decimal) 25 -> (binary) 00000000000000000000000000011001

(decimal) -25 -> (binary) 11111111111111111111111111100111

 

if you shift both of the binary number of 1 to left, you have:

00000000000000000000000000110010 -> 50

11111111111111111111111111001110 -> -50

 

and this can be achieved using a simple shlq, that's why we don't need shalq :)

but we do need sharq, because if you shift using a simple shrq a zero will be introduced in bit 31 of the number and it will screw up the negative value.

so correct me If I'm wrong, but I replaced all the SHALQ of my routine by shlq and the bug was gone !

Link to comment
Share on other sites

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...