Esoty jugando un poco con ensamblador (assembler) de Itanium, gracias a unos manuales que amablemente Intel me mando a mi casa. Este es mi primer programa:
.text
.align 16
.global dot#
.proc dot#
dot:
.prologue
.body
{
.mfi
nop.m 0
nop.f 0
adds r3 = -1, r32
;;
}
{
.mfi
nop.m 0
mov f8 = f0
mov ar.lc = r3
}
.L1:
{
.mmf
ldfd f11 = [r33],8
ldfd f12 = [r34],8
nop.f 0
;;
}
{
.mfb
nop.m 0
fma.d f8=f11, f12, f8
br.cloop.sptk.few .L1
}
{
.mib
nop.m 0
nop.i 0
br.ret.sptk.many b0
}
.endp dot#
Es una función que calcula el producto punto entre dos vectores, el prototipo es:
double dot(const int, const double *, const double *)
Aún hay algunas cosas que no entiendo bien y probablemente tiene fallos (por ejemplo en el caso que n==0), pero la verdad es más fácil de lo que esperaba.