#include <sys/types.h>
#include "fpu_reg.h"
void
__fpu_setreg32(int r, u_int32_t v)
{
switch (r) {
case 0:
asm("ld [%0], %%f0" : : "r" (&v));
break;
case 1:
asm("ld [%0], %%f1" : : "r" (&v));
break;
case 2:
asm("ld [%0], %%f2" : : "r" (&v));
break;
case 3:
asm("ld [%0], %%f3" : : "r" (&v));
break;
case 4:
asm("ld [%0], %%f4" : : "r" (&v));
break;
case 5:
asm("ld [%0], %%f5" : : "r" (&v));
break;
case 6:
asm("ld [%0], %%f6" : : "r" (&v));
break;
case 7:
asm("ld [%0], %%f7" : : "r" (&v));
break;
case 8:
asm("ld [%0], %%f8" : : "r" (&v));
break;
case 9:
asm("ld [%0], %%f9" : : "r" (&v));
break;
case 10:
asm("ld [%0], %%f10" : : "r" (&v));
break;
case 11:
asm("ld [%0], %%f11" : : "r" (&v));
break;
case 12:
asm("ld [%0], %%f12" : : "r" (&v));
break;
case 13:
asm("ld [%0], %%f13" : : "r" (&v));
break;
case 14:
asm("ld [%0], %%f14" : : "r" (&v));
break;
case 15:
asm("ld [%0], %%f15" : : "r" (&v));
break;
case 16:
asm("ld [%0], %%f16" : : "r" (&v));
break;
case 17:
asm("ld [%0], %%f17" : : "r" (&v));
break;
case 18:
asm("ld [%0], %%f18" : : "r" (&v));
break;
case 19:
asm("ld [%0], %%f19" : : "r" (&v));
break;
case 20:
asm("ld [%0], %%f20" : : "r" (&v));
break;
case 21:
asm("ld [%0], %%f21" : : "r" (&v));
break;
case 22:
asm("ld [%0], %%f22" : : "r" (&v));
break;
case 23:
asm("ld [%0], %%f23" : : "r" (&v));
break;
case 24:
asm("ld [%0], %%f24" : : "r" (&v));
break;
case 25:
asm("ld [%0], %%f25" : : "r" (&v));
break;
case 26:
asm("ld [%0], %%f26" : : "r" (&v));
break;
case 27:
asm("ld [%0], %%f27" : : "r" (&v));
break;
case 28:
asm("ld [%0], %%f28" : : "r" (&v));
break;
case 29:
asm("ld [%0], %%f29" : : "r" (&v));
break;
case 30:
asm("ld [%0], %%f30" : : "r" (&v));
break;
case 31:
asm("ld [%0], %%f31" : : "r" (&v));
break;
case 32:
asm("ld [%0], %%f32" : : "r" (&v));
break;
case 33:
asm("ld [%0], %%f33" : : "r" (&v));
break;
case 34:
asm("ld [%0], %%f34" : : "r" (&v));
break;
case 35:
asm("ld [%0], %%f35" : : "r" (&v));
break;
case 36:
asm("ld [%0], %%f36" : : "r" (&v));
break;
case 37:
asm("ld [%0], %%f37" : : "r" (&v));
break;
case 38:
asm("ld [%0], %%f38" : : "r" (&v));
break;
case 39:
asm("ld [%0], %%f39" : : "r" (&v));
break;
case 40:
asm("ld [%0], %%f40" : : "r" (&v));
break;
case 41:
asm("ld [%0], %%f41" : : "r" (&v));
break;
case 42:
asm("ld [%0], %%f42" : : "r" (&v));
break;
case 43:
asm("ld [%0], %%f43" : : "r" (&v));
break;
case 44:
asm("ld [%0], %%f44" : : "r" (&v));
break;
case 45:
asm("ld [%0], %%f45" : : "r" (&v));
break;
case 46:
asm("ld [%0], %%f46" : : "r" (&v));
break;
case 47:
asm("ld [%0], %%f47" : : "r" (&v));
break;
case 48:
asm("ld [%0], %%f48" : : "r" (&v));
break;
case 49:
asm("ld [%0], %%f49" : : "r" (&v));
break;
case 50:
asm("ld [%0], %%f50" : : "r" (&v));
break;
case 51:
asm("ld [%0], %%f51" : : "r" (&v));
break;
case 52:
asm("ld [%0], %%f52" : : "r" (&v));
break;
case 53:
asm("ld [%0], %%f53" : : "r" (&v));
break;
case 54:
asm("ld [%0], %%f54" : : "r" (&v));
break;
case 55:
asm("ld [%0], %%f55" : : "r" (&v));
break;
case 56:
asm("ld [%0], %%f56" : : "r" (&v));
break;
case 57:
asm("ld [%0], %%f57" : : "r" (&v));
break;
case 58:
asm("ld [%0], %%f58" : : "r" (&v));
break;
case 59:
asm("ld [%0], %%f59" : : "r" (&v));
break;
case 60:
asm("ld [%0], %%f60" : : "r" (&v));
break;
case 61:
asm("ld [%0], %%f61" : : "r" (&v));
break;
case 62:
asm("ld [%0], %%f62" : : "r" (&v));
break;
case 63:
asm("ld [%0], %%f63" : : "r" (&v));
break;
}
}
void
__fpu_setreg64(int r, u_int64_t v)
{
switch (r) {
case 0:
asm("ldd [%0], %%f0" : : "r" (&v));
break;
case 2:
asm("ldd [%0], %%f2" : : "r" (&v));
break;
case 4:
asm("ldd [%0], %%f4" : : "r" (&v));
break;
case 6:
asm("ldd [%0], %%f6" : : "r" (&v));
break;
case 8:
asm("ldd [%0], %%f8" : : "r" (&v));
break;
case 10:
asm("ldd [%0], %%f10" : : "r" (&v));
break;
case 12:
asm("ldd [%0], %%f12" : : "r" (&v));
break;
case 14:
asm("ldd [%0], %%f14" : : "r" (&v));
break;
case 16:
asm("ldd [%0], %%f16" : : "r" (&v));
break;
case 18:
asm("ldd [%0], %%f18" : : "r" (&v));
break;
case 20:
asm("ldd [%0], %%f20" : : "r" (&v));
break;
case 22:
asm("ldd [%0], %%f22" : : "r" (&v));
break;
case 24:
asm("ldd [%0], %%f24" : : "r" (&v));
break;
case 26:
asm("ldd [%0], %%f26" : : "r" (&v));
break;
case 28:
asm("ldd [%0], %%f28" : : "r" (&v));
break;
case 30:
asm("ldd [%0], %%f30" : : "r" (&v));
break;
case 32:
asm("ldd [%0], %%f32" : : "r" (&v));
break;
case 34:
asm("ldd [%0], %%f34" : : "r" (&v));
break;
case 36:
asm("ldd [%0], %%f36" : : "r" (&v));
break;
case 38:
asm("ldd [%0], %%f38" : : "r" (&v));
break;
case 40:
asm("ldd [%0], %%f40" : : "r" (&v));
break;
case 42:
asm("ldd [%0], %%f42" : : "r" (&v));
break;
case 44:
asm("ldd [%0], %%f44" : : "r" (&v));
break;
case 46:
asm("ldd [%0], %%f46" : : "r" (&v));
break;
case 48:
asm("ldd [%0], %%f48" : : "r" (&v));
break;
case 50:
asm("ldd [%0], %%f50" : : "r" (&v));
break;
case 52:
asm("ldd [%0], %%f52" : : "r" (&v));
break;
case 54:
asm("ldd [%0], %%f54" : : "r" (&v));
break;
case 56:
asm("ldd [%0], %%f56" : : "r" (&v));
break;
case 58:
asm("ldd [%0], %%f58" : : "r" (&v));
break;
case 60:
asm("ldd [%0], %%f60" : : "r" (&v));
break;
case 62:
asm("ldd [%0], %%f62" : : "r" (&v));
break;
}
}
u_int32_t
__fpu_getreg32(int r)
{
u_int32_t v;
switch (r) {
case 0:
asm("st %%f0, [%0]" : : "r" (&v));
break;
case 1:
asm("st %%f1, [%0]" : : "r" (&v));
break;
case 2:
asm("st %%f2, [%0]" : : "r" (&v));
break;
case 3:
asm("st %%f3, [%0]" : : "r" (&v));
break;
case 4:
asm("st %%f4, [%0]" : : "r" (&v));
break;
case 5:
asm("st %%f5, [%0]" : : "r" (&v));
break;
case 6:
asm("st %%f6, [%0]" : : "r" (&v));
break;
case 7:
asm("st %%f7, [%0]" : : "r" (&v));
break;
case 8:
asm("st %%f8, [%0]" : : "r" (&v));
break;
case 9:
asm("st %%f9, [%0]" : : "r" (&v));
break;
case 10:
asm("st %%f10, [%0]" : : "r" (&v));
break;
case 11:
asm("st %%f11, [%0]" : : "r" (&v));
break;
case 12:
asm("st %%f12, [%0]" : : "r" (&v));
break;
case 13:
asm("st %%f13, [%0]" : : "r" (&v));
break;
case 14:
asm("st %%f14, [%0]" : : "r" (&v));
break;
case 15:
asm("st %%f15, [%0]" : : "r" (&v));
break;
case 16:
asm("st %%f16, [%0]" : : "r" (&v));
break;
case 17:
asm("st %%f17, [%0]" : : "r" (&v));
break;
case 18:
asm("st %%f18, [%0]" : : "r" (&v));
break;
case 19:
asm("st %%f19, [%0]" : : "r" (&v));
break;
case 20:
asm("st %%f20, [%0]" : : "r" (&v));
break;
case 21:
asm("st %%f21, [%0]" : : "r" (&v));
break;
case 22:
asm("st %%f22, [%0]" : : "r" (&v));
break;
case 23:
asm("st %%f23, [%0]" : : "r" (&v));
break;
case 24:
asm("st %%f24, [%0]" : : "r" (&v));
break;
case 25:
asm("st %%f25, [%0]" : : "r" (&v));
break;
case 26:
asm("st %%f26, [%0]" : : "r" (&v));
break;
case 27:
asm("st %%f27, [%0]" : : "r" (&v));
break;
case 28:
asm("st %%f28, [%0]" : : "r" (&v));
break;
case 29:
asm("st %%f29, [%0]" : : "r" (&v));
break;
case 30:
asm("st %%f30, [%0]" : : "r" (&v));
break;
case 31:
asm("st %%f31, [%0]" : : "r" (&v));
break;
case 32:
asm("st %%f32, [%0]" : : "r" (&v));
break;
case 33:
asm("st %%f33, [%0]" : : "r" (&v));
break;
case 34:
asm("st %%f34, [%0]" : : "r" (&v));
break;
case 35:
asm("st %%f35, [%0]" : : "r" (&v));
break;
case 36:
asm("st %%f36, [%0]" : : "r" (&v));
break;
case 37:
asm("st %%f37, [%0]" : : "r" (&v));
break;
case 38:
asm("st %%f38, [%0]" : : "r" (&v));
break;
case 39:
asm("st %%f39, [%0]" : : "r" (&v));
break;
case 40:
asm("st %%f40, [%0]" : : "r" (&v));
break;
case 41:
asm("st %%f41, [%0]" : : "r" (&v));
break;
case 42:
asm("st %%f42, [%0]" : : "r" (&v));
break;
case 43:
asm("st %%f43, [%0]" : : "r" (&v));
break;
case 44:
asm("st %%f44, [%0]" : : "r" (&v));
break;
case 45:
asm("st %%f45, [%0]" : : "r" (&v));
break;
case 46:
asm("st %%f46, [%0]" : : "r" (&v));
break;
case 47:
asm("st %%f47, [%0]" : : "r" (&v));
break;
case 48:
asm("st %%f48, [%0]" : : "r" (&v));
break;
case 49:
asm("st %%f49, [%0]" : : "r" (&v));
break;
case 50:
asm("st %%f50, [%0]" : : "r" (&v));
break;
case 51:
asm("st %%f51, [%0]" : : "r" (&v));
break;
case 52:
asm("st %%f52, [%0]" : : "r" (&v));
break;
case 53:
asm("st %%f53, [%0]" : : "r" (&v));
break;
case 54:
asm("st %%f54, [%0]" : : "r" (&v));
break;
case 55:
asm("st %%f55, [%0]" : : "r" (&v));
break;
case 56:
asm("st %%f56, [%0]" : : "r" (&v));
break;
case 57:
asm("st %%f57, [%0]" : : "r" (&v));
break;
case 58:
asm("st %%f58, [%0]" : : "r" (&v));
break;
case 59:
asm("st %%f59, [%0]" : : "r" (&v));
break;
case 60:
asm("st %%f60, [%0]" : : "r" (&v));
break;
case 61:
asm("st %%f61, [%0]" : : "r" (&v));
break;
case 62:
asm("st %%f62, [%0]" : : "r" (&v));
break;
case 63:
asm("st %%f63, [%0]" : : "r" (&v));
break;
}
return (v);
}
u_int64_t
__fpu_getreg64(int r)
{
u_int64_t v;
switch (r) {
case 0:
asm("std %%f0, [%0]" : : "r" (&v));
break;
case 2:
asm("std %%f2, [%0]" : : "r" (&v));
break;
case 4:
asm("std %%f4, [%0]" : : "r" (&v));
break;
case 6:
asm("std %%f6, [%0]" : : "r" (&v));
break;
case 8:
asm("std %%f8, [%0]" : : "r" (&v));
break;
case 10:
asm("std %%f10, [%0]" : : "r" (&v));
break;
case 12:
asm("std %%f12, [%0]" : : "r" (&v));
break;
case 14:
asm("std %%f14, [%0]" : : "r" (&v));
break;
case 16:
asm("std %%f16, [%0]" : : "r" (&v));
break;
case 18:
asm("std %%f18, [%0]" : : "r" (&v));
break;
case 20:
asm("std %%f20, [%0]" : : "r" (&v));
break;
case 22:
asm("std %%f22, [%0]" : : "r" (&v));
break;
case 24:
asm("std %%f24, [%0]" : : "r" (&v));
break;
case 26:
asm("std %%f26, [%0]" : : "r" (&v));
break;
case 28:
asm("std %%f28, [%0]" : : "r" (&v));
break;
case 30:
asm("std %%f30, [%0]" : : "r" (&v));
break;
case 32:
asm("std %%f32, [%0]" : : "r" (&v));
break;
case 34:
asm("std %%f34, [%0]" : : "r" (&v));
break;
case 36:
asm("std %%f36, [%0]" : : "r" (&v));
break;
case 38:
asm("std %%f38, [%0]" : : "r" (&v));
break;
case 40:
asm("std %%f40, [%0]" : : "r" (&v));
break;
case 42:
asm("std %%f42, [%0]" : : "r" (&v));
break;
case 44:
asm("std %%f44, [%0]" : : "r" (&v));
break;
case 46:
asm("std %%f46, [%0]" : : "r" (&v));
break;
case 48:
asm("std %%f48, [%0]" : : "r" (&v));
break;
case 50:
asm("std %%f50, [%0]" : : "r" (&v));
break;
case 52:
asm("std %%f52, [%0]" : : "r" (&v));
break;
case 54:
asm("std %%f54, [%0]" : : "r" (&v));
break;
case 56:
asm("std %%f56, [%0]" : : "r" (&v));
break;
case 58:
asm("std %%f58, [%0]" : : "r" (&v));
break;
case 60:
asm("std %%f60, [%0]" : : "r" (&v));
break;
case 62:
asm("std %%f62, [%0]" : : "r" (&v));
break;
}
return (v);
}