Add custom legalization for floating point constants.

Use the simplest expansion which materializes the bits of the floating
point constant as an integer and then bit-casts to the floating point
type. In the future, we may want to use constant pools instead. Either
way, we need custom legalization.

Also add a legalize_monomorphic() function to the Python targetISA class
which permits the configuration of a default legalization action for
monomorphic instructions, just like legalize_type() does for polymorphic
instructions.
This commit is contained in:
Jakob Stoklund Olesen
2017-09-18 13:27:25 -07:00
parent d2273c73ea
commit 88348368a8
7 changed files with 67 additions and 0 deletions

View File

@@ -20,6 +20,7 @@ except ImportError:
pass
I32.legalize_monomorphic(expand)
I32.legalize_type(
default=narrow,
b1=expand,
@@ -27,6 +28,7 @@ I32.legalize_type(
f32=expand,
f64=expand)
I64.legalize_monomorphic(expand)
I64.legalize_type(
default=narrow,
b1=expand,

View File

@@ -13,12 +13,14 @@ from .settings import use_m
from cdsl.ast import Var
from base.legalize import narrow, expand
RV32.legalize_monomorphic(expand)
RV32.legalize_type(
default=narrow,
i32=expand,
f32=expand,
f64=expand)
RV64.legalize_monomorphic(expand)
RV64.legalize_type(
default=narrow,
i32=expand,