From: Bernhard Urban Date: Mon, 1 Mar 2010 14:10:29 +0000 (+0100) Subject: asma: vllt ist dieses 'min_t -'A'' doch nicht zum vernachlaessigen... X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=uebersetzerbau-ss10.git;a=commitdiff_plain;h=1c981ac2ea93cbf2ab6fb7624641f6d5cb6aebaa asma: vllt ist dieses 'min_t -'A'' doch nicht zum vernachlaessigen... --- diff --git a/asma/asma.s b/asma/asma.s index 1edcffc..ecd4309 100644 --- a/asma/asma.s +++ b/asma/asma.s @@ -25,9 +25,16 @@ min(’Z’+1+min_t-’A’ > c+min_t-’A’ ? 0xff : 0, ’a’-’A’) wobei min_t der minimale Wert des Datentyps ist, den der Vergleich behandelt (bei pcmpgtb also -128). Zusätzlich zu dem oben genannten dürften die Befehle pminub, paddb, und psubb nützlich sein. */ pxor %xmm1, %xmm1 pxor %xmm2, %xmm2 + pxor %xmm2, %xmm3 + pxor %xmm2, %xmm4 + pxor %xmm2, %xmm5 - #init %xmm2 mit "'Z' + 1" fuer jedes byte - mov $0x5a5a5a5a5a5a5a5a, %rbx + #init %xmm2 mit "'Z' + 1 + min_t - 'A'" fuer jedes byte + #'Z' + 1 + min_t - 'A' = 90 + 1 - 128 - 65 = -102 + #102 = 01100110 + #~102 = 10011001 + #(~102)+1 = 10011010 = 0x9A + mov $0x9a9a9a9a9a9a9a9a, %rbx movq %rbx, %xmm2 pslldq $8, %xmm2 movq %rbx, %xmm2 @@ -42,6 +49,15 @@ wobei min_t der minimale Wert des Datentyps ist, den der Vergleich behandelt (be movdqu (%rdi), %xmm1 movdqu (%rdi), %xmm3 + #addiere in %xmm1 "min_t-'A'" + # = -128 - 65 = 63 = 0x3f + mov $0x3f3f3f3f3f3f3f3f, %rbx + movq %rbx, %xmm5 + pslldq $8, %xmm5 + movq %rbx, %xmm5 + + paddb %xmm5, %xmm1 + #"Packed COMpare Greater Than (Byte)" pcmpgtb %xmm2, %xmm1