Register xmm0

xmm0 merupakan salah satu register SSE yang dikenalkan oleh Intel pada tahun 1999. Register SSE? Mari telusuri.

SSE merupakan kependekan dari Streaming SIMD Extensions. Register SSE digunakan untuk floating-point. Jumlah register SSE adalah 128 bit dan dapat digunakan untuk melakukan operasi berbagai macam tipe dan ukuran data. Tidak seperti MMX, Register SSE tidak melakukan overlap terhadap stack floating-point.

Contoh?

#include <stdio.h>

main(){
    float x = 7.1;
    float y = 0.1;
    float z;

    z = x - y;
    printf("%f\n", z);
    return 0;
}

// Kompilasi
// gcc xmm0.c -o xmm0.out

// Hasil
// 7.000000

// ASM
/*
; x
var_C= dword ptr -0Ch
; y
var_8= dword ptr -8
; z
var_4= dword ptr -4

push    rbp    ; 
mov     rbp, rsp    ; rbp = rsp
sub     rsp, 10h    ; rsp - 16

; x = 7.1
mov     eax, cs:dword_400608    ; eax = 1088631603 = 7.1
mov     [rbp+var_C], eax    ; [rbp+var_C] = eax
; y = 0.1
mov     eax, cs:dword_40060C    ; eax = 1036831949 = 0.1
mov     [rbp+var_8], eax    ; [rbp+var_8] = eax
; z = x - y
movss   xmm0, [rbp+var_C]    ; xmm0 = [rbp+var_C]
subss   xmm0, [rbp+var_8]    ; xmm0 = [rbp+var_C] - [rbp+var_8]
movss   [rbp+var_4], xmm0    ; [rbp+var_4] = xmm0
movss   xmm0, [rbp+var_4]    ; xmm0 = [rbp+var_4]
cvtps2pd xmm0, xmm0    ; convert packet single precision to packet double precision

// printf("%f\n", z)
mov     edi, offset format ; "%f\n"
mov     eax, 1
call    _printf

// return 0
mov     eax, 0
leave
retn
*/

Sedangkan cvtps2pd merupakan fungsi asm yang digunakan untuk mengkonversi nilai dua paket single-precision floating-point pada operand sumber menjadi nilai dua paket double-precision floating-point pada operand tujuan.

(yp/wikibooks/jaist)

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s