Jump to content
Jagware
Sign in to follow this  
GT Turbo

Décalage arithmétique gauche

Recommended Posts

GT Turbo    5

Et encore la surprise du chef, on a pas de décalage arithmétique gauche sur le Gpu !! Des droits on en a, mais gauche non et on recommence la série qui dit mieux, je proposes :

 

 

 

 

shlq #x,r0 ; Décale de x

 

jr NC,Pas_signé ; test du bit de retenue

 

nop ; obligatoire raison technique

 

bset #31,r0 ; signature manuel

 

Pas_signé: ; label pour le saut

 

 

 

 

On pratique le décalage, le bit de retenue est placé. Donc on en profite pour faire un saut si le nombre était positif sinon on le signe a la main.

 

 

 

Attention il y a 'sha' qui le fait mais seulement du coté gauche !! :wacko:

 

 

 

GT En train de décalé a la main :wacko:

Share this post


Link to post
Share on other sites
SCPCD    0

??? :blink:

 

Je ne comprends pas...

 

Le shift Arithmetique Gauche c'est pas la même chose que le shift Logique gauche ???

 

ex sur 8bits :

 

non signé :

 

00000110 = 6 shl 1

 

-> 00001100 = 12

 

 

 

signé :

 

11111101 = -3 shl 1

 

-> 11111010 = -6

Share this post


Link to post
Share on other sites
GT Turbo    5
SCPCD :


??? :blink:

Je ne comprends pas...

Le shift Arithmetique Gauche c'est pas la même chose que le shift Logique gauche ???

ex sur 8bits :

non signé :

00000110 = 6 shl 1

-> 00001100 = 12



signé :

11111101 = -3 shl 1

-> 11111010 = -6





Non si c'est comme sur un 68000, l'arithmetique conserve le bit de signe pas le logique.



Et si on essais comme cela :



10111101 si tu le décales de 1 a gauche, le chiffre passe au positif car le zéro passe sur le bit de signe.



GT ;)

Share this post


Link to post
Share on other sites
Azrael    0

Et faire un SHA tout simplement ça fonctionne pas ? De toute maniere le decalage a gauche est arithmetique a cause du complement a zero, mais le decalage droit a besoin d'etre arithmetique, d'ou la nuance dans le descriptif de l'instruction.

 

 

 

Ceci dit je peux me tromper.

Share this post


Link to post
Share on other sites
GT Turbo    5
Azrael :


Et faire un SHA tout simplement ça fonctionne pas ? De toute maniere le decalage a gauche est arithmetique a cause du complement a zero, mais le decalage droit a besoin d'etre arithmetique, d'ou la nuance dans le descriptif de l'instruction.



Ceci dit je peux me tromper.





Sha pas essayé, j'ai pris peur quand dans la doc y es inscrit qu'a droite c'est arithmetique et a gauche logique.



Azrael tu peux me faire une explication de ton explication :wacko:, j'ai du mal a capter !!



GT Bien perdu !! :wacko:

Share this post


Link to post
Share on other sites
Azrael    0

C'est la meme explication que SCPCD :

 

 

 

ex sur 8bits :

 

non signé :

 

00000110 = 6 shl 1

 

-> 00001100 = 12

 

 

 

signé :

 

11111101 = -3 shl 1

 

-> 11111010 = -6

 

 

 

Je rajouterai qu'un SHA vers la droite te complete avec des bits 1 a gauche, comme ca ton nombre reste negatif.

 

 

 

Avec ton exemple : 10111101 avec un decalage a gauche le chiffre passe au positif, ok, mais je dirais aussi que tu a un depassement de capacite, avec 32 bits faut quand meme le faire.

Share this post


Link to post
Share on other sites
Azrael    0

Autre chose : si c'est bien ce que je pense, SHARQ est arithmetique (c'est pas nouveau, c'est dans la doc), mais SHLQ l'est aussi pour les memes raisons que mon post precedent. Tout ceci est a verifier bien entendu.

Share this post


Link to post
Share on other sites
SCPCD    0
GT Turbo :


Non si c'est comme sur un 68000, l'arithmetique conserve le bit de signe pas le logique.



Et si on essais comme cela :



10111101 si tu le décales de 1 a gauche, le chiffre passe au positif car le zéro passe sur le bit de signe.



Ben, dans la doc M68000PRM le LSL et le ASL c'est la même chose ??

et dans ton exemple, comme la dit Azrael, il y a depassement de capacité.

Share this post


Link to post
Share on other sites
GT Turbo    5
SCPCD :


Ben, dans la doc M68000PRM le LSL et le ASL c'est la même chose ??

et dans ton exemple, comme la dit Azrael, il y a depassement de capacité.





Pas tout a fait le bit de retenue est inséré comme bit rentrant ce que ne fait pas le Gpu.



Mais vous avez raison, Azrael m'a fait une explication de la chose, c'est ma réprésentation binaire des chiffres qui avait besoin d'une grosse révision !!



GT Rouillé en binaire !! :wacko:

Share this post


Link to post
Share on other sites
GT Turbo    5

J'ai fait des essais ce matin, donc :

 

 

 

SCPCD tu as raison concernant le lsl et le asl. Pareil, il n'y a que l'asr qui insère le bit de retenue (Carry) par la gauche.

 

 

 

Par contre piège, avec un asr ou son plutot sharq, décalage a droite, cette instruction peut transformer un nombre positif en négatif, essayez et vérifié, si le nombre posifit est très grand, un simple décalage de deux vers la gauche et un retour vers la droite peut le faire plonger : détail :

 

 

 

%01111111111111111111111111111 (J'ai pas envie de compter, donc que le total fasse 32 digits).

 

 

 

Un décalage de deux vers la gauche fait sortir le premier un et donc 'set' le bit de retenue et si on fait un asr de deux vers la droite, le décalage sera fait puis le bit de retenue placé, donc nombre négatif.

 

 

 

J'ai essayé différents chiffres et si celui ci est un peu trop grand (Faut que je recopies une fois quelques chiffres) et un bon décalage (Ou des routines fait un décalage de 12(*4096)), ca va très vite de dépasser les 32 bits.

 

 

 

Voili, voila

 

 

 

GT Décalé :wacko:

 

 

 

Edit : modifié un droit par un gauche

Share this post


Link to post
Share on other sites
Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoticons maximum 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.

Sign in to follow this  

×