SIMD
Single Instruction, Single Data

Single Instruction, Multiple Data

Le istruzioni MMX (e le IntegerSSE) sono operazioni SIMD rivolte a
interi (solitamente 4 word a istruzione). Per questo motivo do un
rimando al manuale dell'intel [1] e alla mia Guida alle istruzioni fornite da
MMX.
SSE
Entriamo in dettaglio sulle istruzioni SSE per operazioni su floating
point. Queste estensioni permettono di eseguire operazioni tra 4
floating point singola precisione con una sola istruzione.
Il registro XMM che viene usato nelle operazioni SSE e' un registro a
128bit, che contiene 4 floating point impacchettati. Questi 8 registri
sono in piu ai registri floating point, cosa che non era invece
avvenuta nel caso dell'MMX in cui i registri dell'MMX erano in comune
con i registri dei calcoli in FloatingPoint.
In generale le SSE permettono per ogni istruzione un funzionamento SISD
che SIMD. Percio' e' possibile sommare il primo floating point tra un
registro XMM e la memoria usando il comando ADDSS, sia sommare tutti i
4
floating point tra XMM e memoria usando ADDPS.
Istruzioni aritmetiche
Le istruzioni aritmetiche che SSE forniscono sono
ADDPS/ADDSS somma tra floating point;
SUBPS/SUBSS sottrazione tra floating point
MULPS/MULSS moltiplicazione tra floating
point
DIVPS/DIVSS divisione tra floating point
SQRTPS/SQRTSS radice quadrata
MAXPS/MAXSS il massimo tra due valori
DestReg[i] = Max(DestReg[i], SrcReg[i])
MINPS/MINSS il minimo tra due valori
DestReg[i] = Min(DestReg[i], SrcReg[i])
Calcolo del reciproco di un numero
RCPSS/RCPPS calcola il reciproco di un numero (1.0f/number).
RSQTRSS/RSQTRSP calcola il reciproco della radice quadrata di un numero
(1.0f/sqrt(number))
Istruzioni di confronto
Sono presenti le solite istruzioni di confronto (uguale, maggiore,
maggiore uguale, minore uguale).
Istruzioni di conversione
Le SSE possiedono le funzioni di conversione da e a i registri a 64 bit
dell'MMX e i registri x86 a 32 bit.
CVTPI2PS converte i due integer a 32bit di un registro MMX nei due
numeri a floating point meno significativi di un registo XMM.
CVTSI2SS converte un integer a 32 bit di un registro MMX nel floating
point meno significativo di un registro MMX.
CVTPS2PI converte i due floating meno significativi di un registro XMM
in due interi in un registro XMM. CVTTPS2PI e' simile a CVTPS2PI,
tranne che la conversione si puo' considerare inesatta, e il risultato
del troncamento viene restituito.
CVTSS2SI converte il numero meno significativo del registro XMM in un
intero a 32 bit di un registro standard. CVTTSS2SI e' simile a
CVTSS2SI, tranne che viene troncato e il resto restituito.
Reference
[1] http://www.tommesani.com/Docs.html
[2] Intel Architecture Software Developer’s Manual, Volume 2:
Instruction Set Reference