aboutsummaryrefslogtreecommitdiffstats
path: root/evaluation.adb
diff options
context:
space:
mode:
authorgingold <gingold@b72b5c32-5f01-0410-b925-b5c7b92870f7>2005-11-07 23:18:35 +0000
committergingold <gingold@b72b5c32-5f01-0410-b925-b5c7b92870f7>2005-11-07 23:18:35 +0000
commit004bd818080a8090ea61bfb9cd656b01fe4541e0 (patch)
treea09472ff8de767ccd7f84d64ffc3c3fc4179bb75 /evaluation.adb
parentd5888aa28f654fa58ec9f3914932885e36af3d5c (diff)
downloadghdl-004bd818080a8090ea61bfb9cd656b01fe4541e0.tar.gz
ghdl-004bd818080a8090ea61bfb9cd656b01fe4541e0.tar.bz2
ghdl-004bd818080a8090ea61bfb9cd656b01fe4541e0.zip
handle universal real div integer evaluation,
more optimizations added, multi-thread ready grt, bug fixes
Diffstat (limited to 'evaluation.adb')
-rw-r--r--evaluation.adb53
1 files changed, 47 insertions, 6 deletions
diff --git a/evaluation.adb b/evaluation.adb
index 85df7c3bc..16dcb149d 100644
--- a/evaluation.adb
+++ b/evaluation.adb
@@ -672,8 +672,6 @@ package body Evaluation is
if not Dir_Left then
Cnt := Len - Cnt;
end if;
- when others =>
- raise Internal_Error;
end case;
Res_List := Create_Iir_List;
@@ -1070,6 +1068,9 @@ package body Evaluation is
when Iir_Predefined_Universal_I_R_Mul =>
return Build_Floating
(Iir_Fp64 (Get_Value (Left)) * Get_Fp_Value (Right), Orig);
+ when Iir_Predefined_Universal_R_I_Div =>
+ return Build_Floating
+ (Get_Fp_Value (Left) / Iir_Fp64 (Get_Value (Right)), Orig);
when Iir_Predefined_Array_Equality =>
declare
@@ -1110,6 +1111,21 @@ package body Evaluation is
return Eval_Shift_Operator
(Eval_String_Literal (Left), Right, Orig, Func);
+ when Iir_Predefined_Array_Inequality
+ | Iir_Predefined_Array_Less
+ | Iir_Predefined_Array_Less_Equal
+ | Iir_Predefined_Array_Greater
+ | Iir_Predefined_Array_Greater_Equal
+ | Iir_Predefined_Boolean_Array_And
+ | Iir_Predefined_Boolean_Array_Nand
+ | Iir_Predefined_Boolean_Array_Or
+ | Iir_Predefined_Boolean_Array_Nor
+ | Iir_Predefined_Boolean_Array_Xor
+ | Iir_Predefined_Boolean_Array_Xnor =>
+ -- FIXME: todo.
+ Error_Internal (Orig, "eval_dyadic_operator: " &
+ Iir_Predefined_Functions'Image (Func));
+
when Iir_Predefined_Boolean_Not
| Iir_Predefined_Bit_Not
| Iir_Predefined_Integer_Absolute
@@ -1125,13 +1141,38 @@ package body Evaluation is
| Iir_Predefined_Record_Equality
| Iir_Predefined_Record_Inequality
| Iir_Predefined_Access_Equality
- | Iir_Predefined_Access_Inequality =>
+ | Iir_Predefined_Access_Inequality
+ | Iir_Predefined_Bit_Array_Not
+ | Iir_Predefined_Boolean_Array_Not
+ | Iir_Predefined_Now_Function
+ | Iir_Predefined_Deallocate
+ | Iir_Predefined_Write
+ | Iir_Predefined_Read
+ | Iir_Predefined_Read_Length
+ | Iir_Predefined_File_Open
+ | Iir_Predefined_File_Open_Status
+ | Iir_Predefined_File_Close
+ | Iir_Predefined_Endfile
+ | Iir_Predefined_Attribute_Image
+ | Iir_Predefined_Attribute_Value
+ | Iir_Predefined_Attribute_Pos
+ | Iir_Predefined_Attribute_Val
+ | Iir_Predefined_Attribute_Succ
+ | Iir_Predefined_Attribute_Pred
+ | Iir_Predefined_Attribute_Rightof
+ | Iir_Predefined_Attribute_Leftof
+ | Iir_Predefined_Attribute_Left
+ | Iir_Predefined_Attribute_Right
+ | Iir_Predefined_Attribute_Event
+ | Iir_Predefined_Attribute_Active
+ | Iir_Predefined_Attribute_Last_Value
+ | Iir_Predefined_Attribute_Last_Event
+ | Iir_Predefined_Attribute_Last_Active
+ | Iir_Predefined_Attribute_Driving
+ | Iir_Predefined_Attribute_Driving_Value =>
-- Not binary or never locally static.
Error_Internal (Orig, "eval_dyadic_operator: " &
Iir_Predefined_Functions'Image (Func));
- when others =>
- Error_Internal (Orig, "eval_dyadic_operator: " &
- Iir_Predefined_Functions'Image (Func));
end case;
exception
when Constraint_Error =>