From: Bernhard Urban Date: Tue, 2 Mar 2010 21:10:45 +0000 (+0100) Subject: asmb: init ausserhalb der schleife X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=9f650d38019b6efc69e0baca7d4c0d40f3f0f75b;hp=8f2ad997b2960922b2a267f33235b65d153b557d;p=uebersetzerbau-ss10.git asmb: init ausserhalb der schleife --- diff --git a/asmb/asmb.s b/asmb/asmb.s index b61e703..91cc957 100644 --- a/asmb/asmb.s +++ b/asmb/asmb.s @@ -5,12 +5,10 @@ asmb: .LFB2: xor %rdx, %rdx - xor %ecx, %ecx //soll einfach null sein pxor %xmm14, %xmm14 -.nextround: /*init %xmm8 mit "'Z' + 1 + min_t - 'A'" fuer jedes byte * 'Z' + 1 + min_t - 'A' = 90 + 1 - 128 - 65 = -102 * 102 = 01100110 @@ -35,20 +33,28 @@ asmb: movq %rax, %xmm15 movddup %xmm15, %xmm10 +.nextround: + //speicheradresse des pointers zeigt auf 16*8 feld = 128bit + movdqu (%rdi, %rdx, 8), %xmm11 + movdqu (%rdi, %rdx, 8), %xmm12 + //c+min_t-'A' paddb %xmm10, %xmm11 + //0x9a9a... zwischenspeichern + movdqa %xmm8, %xmm15 + /*"Packed COMpare Greater Than (Byte)" * X = 'Z' + 1 + min_t - 'A' > c + min_t - 'A' ? 0xff : 0 * achtung beim intuitiven lesen des befehles. 'kleiner' * ist mit 'groesser' vertauscht und vice versa */ - pcmpgtb %xmm11, %xmm8 + pcmpgtb %xmm11, %xmm15 //Y = min(X, 'a' - 'A') - pminub %xmm9, %xmm8 + pminub %xmm9, %xmm15 //c += Y - paddb %xmm8, %xmm12 + paddb %xmm15, %xmm12 //retuniere an die richtige speicheradresse movapd %xmm12, (%rdi, %rdx, 8)