57 lines
817 B
C
57 lines
817 B
C
#include <math.h>
|
|
#include <stdint.h>
|
|
|
|
#define N 10
|
|
|
|
static inline uint64_t read_cycles() {
|
|
uint64_t start;
|
|
asm volatile ("rdcycle %0" : "=r"(start));
|
|
return start;
|
|
}
|
|
|
|
int main() {
|
|
// fcvt.s.h
|
|
|
|
volatile float b;
|
|
volatile _Float16 d;
|
|
volatile double e;
|
|
volatile _Float16 g;
|
|
|
|
volatile _Float16 a = 3.0f;
|
|
|
|
read_cycles();
|
|
for (int i = 0; i < N; i++) {
|
|
b = (float) a;
|
|
}
|
|
read_cycles();
|
|
|
|
// fcvt.h.s
|
|
|
|
volatile float c = 3.0f;
|
|
|
|
read_cycles();
|
|
for (int i = 0; i < N; i++) {
|
|
d = (_Float16) c;
|
|
}
|
|
read_cycles();
|
|
|
|
// fcvt.d.h
|
|
|
|
read_cycles();
|
|
for (int i = 0; i < N; i++) {
|
|
double e = (double) a;
|
|
}
|
|
read_cycles();
|
|
|
|
// fcvt.h.d
|
|
|
|
volatile double f = 3.0f;
|
|
|
|
read_cycles();
|
|
for (int i = 0; i < N; i++) {
|
|
g = (_Float16) f;
|
|
}
|
|
read_cycles();
|
|
|
|
return 0;
|
|
}
|