| #include <stdio.h> |
| |
| /* Test various BFP ops: |
| - square root |
| - load negative |
| - load positive |
| - load complement |
| */ |
| |
| void sqebr(float in) |
| { |
| float out; |
| |
| __asm__ volatile("sqebr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in)); |
| printf("sqebr %f -> %f\n", in, out); |
| } |
| |
| void sqdbr(double in) |
| { |
| double out; |
| |
| __asm__ volatile("sqdbr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in)); |
| printf("sqdbr %f -> %f\n", in, out); |
| } |
| |
| void lnebr(float in) |
| { |
| float out; |
| |
| __asm__ volatile("lnebr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in)); |
| printf("lnebr %f -> %f\n", in, out); |
| } |
| |
| void lndbr(double in) |
| { |
| double out; |
| |
| __asm__ volatile("lndbr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in)); |
| printf("lndbr %f -> %f\n", in, out); |
| } |
| |
| void lpebr(float in) |
| { |
| float out; |
| |
| __asm__ volatile("lpebr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in)); |
| printf("lpebr %f -> %f\n", in, out); |
| } |
| |
| void lpdbr(double in) |
| { |
| double out; |
| |
| __asm__ volatile("lpdbr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in)); |
| printf("lpdbr %f -> %f\n", in, out); |
| } |
| |
| void lcebr(float in) |
| { |
| float out; |
| |
| __asm__ volatile("lcebr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in)); |
| printf("lcebr %f -> %f\n", in, out); |
| } |
| |
| void lcdbr(double in) |
| { |
| double out; |
| |
| __asm__ volatile("lcdbr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in)); |
| printf("lcdbr %f -> %f\n", in, out); |
| } |
| |
| int main(void) |
| { |
| // square root |
| sqebr(121.0f); // 4 byte values |
| sqdbr(144.0); // 8 bytes values |
| |
| // load negative |
| lnebr(-2.5f); // 4 byte values |
| lnebr(12.5f); // 4 byte values |
| |
| lndbr(-0.5); // 8 byte values |
| lndbr(42.5); // 8 byte values |
| |
| // load positive |
| lpebr(-2.5f); // 4 byte values |
| lpebr(12.5f); // 4 byte values |
| |
| lpdbr(-0.5); // 8 byte values |
| lpdbr(42.5); // 8 byte values |
| |
| // load complement |
| lcebr(-23.5f); // 4 byte values |
| lcebr(123.5f); // 4 byte values |
| |
| lcdbr(-17.5); // 8 byte values |
| lcdbr(234.5); // 8 byte values |
| |
| return 0; |
| } |