Platform-specific built-in functions
Require Import String Coqlib.
Require Import AST Integers Floats Values.
Require Import Builtins0.
Require ExtValues.
Inductive platform_builtin :
Type :=
|
BI_bits_of_float
|
BI_bits_of_double
|
BI_float_of_bits
|
BI_double_of_bits
|
BI_secu_wd (
t:
typ).
Local Open Scope string_scope.
Local Open Scope asttyp_scope.
Definition platform_builtin_table :
list (
string *
platform_builtin) :=
(
"__builtin_bits_of_float",
BI_bits_of_float)
:: (
"__builtin_bits_of_double",
BI_bits_of_double)
:: (
"__builtin_float_of_bits",
BI_float_of_bits)
:: (
"__builtin_double_of_bits",
BI_double_of_bits)
:: (
"__builtin_secu_wd_int",
BI_secu_wd Tint)
:: (
"__builtin_secu_wd_uint",
BI_secu_wd Tint)
:: (
"__builtin_secu_wd_long",
BI_secu_wd Tlong)
:: (
"__builtin_secu_wd_ulong",
BI_secu_wd Tlong)
:: (
"__builtin_secu_wd_llong",
BI_secu_wd Tlong)
:: (
"__builtin_secu_wd_ullong",
BI_secu_wd Tlong)
:: (
"__builtin_secu_wd_float",
BI_secu_wd Tsingle)
:: (
"__builtin_secu_wd_double",
BI_secu_wd Tfloat)
::
nil.
Definition platform_builtin_sig (
b:
platform_builtin) :
signature :=
match b with
|
BI_bits_of_float => [
Xsingle --->
Xint]
|
BI_bits_of_double => [
Xfloat --->
Xlong]
|
BI_float_of_bits => [
Xint --->
Xsingle]
|
BI_double_of_bits => [
Xlong --->
Xfloat]
|
BI_secu_wd t =>
let t' :=
inj_type t in [
t' --->
t' ]
end.
Program Definition platform_builtin_sem (
b:
platform_builtin) :
builtin_sem (
sig_res (
platform_builtin_sig b)) :=
match b with
|
BI_bits_of_float =>
mkbuiltin_n1t Tsingle Xint Float32.to_bits
|
BI_bits_of_double =>
mkbuiltin_n1t Tfloat Xlong Float.to_bits
|
BI_float_of_bits =>
mkbuiltin_n1t Tint Xsingle Float32.of_bits
|
BI_double_of_bits =>
mkbuiltin_n1t Tlong Xfloat Float.of_bits
|
BI_secu_wd ty =>
mkbuiltin_v1p (
inj_type ty) (
fun (
x :
val) =>
Val.welldefined x ty) _ _
end.
Next Obligation.
destruct v1;
simpl;
trivial;
try destruct (
negb _);
destruct ty;
simpl;
trivial.
Qed.
Next Obligation.
destruct v1;
simpl;
try destruct (
negb _)
eqn:
F;
simpl;
trivial.
all:
inv H;
simpl;
destruct ty;
try rewrite F;
simpl;
trivial.
Qed.