diff options
| author | Robert Norton | 2018-01-29 15:38:31 +0000 |
|---|---|---|
| committer | Robert Norton | 2018-01-29 15:38:31 +0000 |
| commit | 2f833362270c2b9562c627ba5feb97f13371921e (patch) | |
| tree | f2ce24952acb0858fe5ab909561aab4ca595a8e2 /src | |
| parent | 36c37fc31421f4965a3613ae9a257cc23ac623cd (diff) | |
implement shift primitives in sail_lib.ml
Diffstat (limited to 'src')
| -rw-r--r-- | src/sail_lib.ml | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/sail_lib.ml b/src/sail_lib.ml index 3cd8e18c..f0ea7fb4 100644 --- a/src/sail_lib.ml +++ b/src/sail_lib.ml @@ -506,8 +506,18 @@ let sign_extend (vec, n) = | [] -> replicate_bits ([B0], Big_int.of_int (m - List.length vec)) @ vec | B1 :: _ as vec -> replicate_bits ([B1], Big_int.of_int (m - List.length vec)) @ vec -(* FIXME *) -let shift_bits_right (x, y) = x -let shift_bits_left (x, y) = x +let shift_bits_right (x, y) = + let ybi = uint(y) in + let yi = Big_int.to_int ybi in + let zeros = replicate_bits ([B0], ybi) in + let rbits = zeros @ x in + take (List.length x) rbits + +let shift_bits_left (x, y) = + let ybi = uint(y) in + let yi = Big_int.to_int ybi in + let zeros = replicate_bits ([B0], ybi) in + let rbits = x @ zeros in + drop yi rbits let speculate_conditional_success () = true |
