#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; }