71 lines
1.2 KiB
Bash
71 lines
1.2 KiB
Bash
#!/bin/sh
|
|
|
|
halfToFloat() {
|
|
local s=$1 e=$2 m=$3
|
|
if [ $e -eq 0 ]; then
|
|
if [ $m -eq 0 ]; then
|
|
# Plus or minus zero
|
|
echo $((s << 31))
|
|
return
|
|
else
|
|
# Denormalized number -- renormalize it
|
|
while [ $((m & 0x400)) -eq 0 ]; do
|
|
m=$((m << 1))
|
|
e=$((e - 1))
|
|
done
|
|
e=$((e + 1))
|
|
m=$((m & 0x3ff))
|
|
fi
|
|
elif [ $e -eq 31 ]; then
|
|
if [ "$m" -eq 0 ]; then
|
|
# Positive or negative infinity
|
|
echo $(((s << 31) | 0x7f800000))
|
|
return
|
|
else
|
|
# Nan - preserve sign and significand bits
|
|
echo $(((s << 31) | 0x7f800000 | (m << 13)))
|
|
return
|
|
fi
|
|
fi
|
|
# Normalized number
|
|
e=$((e + (127 - 15)))
|
|
m=$((m << 13))
|
|
# Assemble s, e and m
|
|
echo $(((s << 31) | (e << 23) | m))
|
|
}
|
|
|
|
|
|
echo "//"
|
|
echo "// This is an automatically generated file."
|
|
echo "// Do not edit."
|
|
echo "//"
|
|
echo ""
|
|
echo "{"
|
|
echo -n " "
|
|
|
|
s=0
|
|
m=0
|
|
e=0
|
|
j=0
|
|
k=0
|
|
while [ $s -lt 2 ]; do
|
|
while [ $e -lt 32 ]; do
|
|
while [ $m -lt 1024 ]; do
|
|
out="$(halfToFloat $s $e $m)"
|
|
printf "{0x%08x}, " $out
|
|
m=$((m + 1))
|
|
j=$((j + 1))
|
|
if [ $j -eq 4 ]; then
|
|
printf "\n"
|
|
k=$((k + 1))
|
|
[ $k -lt 16384 ] && printf " "
|
|
j=0
|
|
fi
|
|
done
|
|
m=0
|
|
e=$((e + 1))
|
|
done
|
|
e=0
|
|
s=$((s + 1))
|
|
done
|
|
echo "};"
|