aboutsummaryrefslogtreecommitdiffstats
path: root/mppa_k1c/TargetPrinter.ml
diff options
context:
space:
mode:
Diffstat (limited to 'mppa_k1c/TargetPrinter.ml')
-rw-r--r--mppa_k1c/TargetPrinter.ml54
1 files changed, 22 insertions, 32 deletions
diff --git a/mppa_k1c/TargetPrinter.ml b/mppa_k1c/TargetPrinter.ml
index 83d12da7..6a21e63d 100644
--- a/mppa_k1c/TargetPrinter.ml
+++ b/mppa_k1c/TargetPrinter.ml
@@ -130,6 +130,12 @@ module Target (*: TARGET*) =
| RA -> "$ra"
| _ -> assert false
+ let scale_of_shift1_4 = let open ExtValues in function
+ | SHIFT1 -> 2
+ | SHIFT2 -> 4
+ | SHIFT3 -> 8
+ | SHIFT4 -> 16;;
+
(* Names of sections *)
let name_of_section = function
@@ -513,17 +519,13 @@ module Target (*: TARGET*) =
| Paddw (rd, rs1, rs2) ->
fprintf oc " addw %a = %a, %a\n" ireg rd ireg rs1 ireg rs2
- | Paddxw (zshift, rd, rs1, rs2) ->
- let shift = camlint_of_coqint zshift in
- assert(shift >= 1l && shift <= 4l);
- fprintf oc " addx%dw %a = %a, %a\n" (1 lsl (Int32.to_int shift))
+ | Paddxw (s14, rd, rs1, rs2) ->
+ fprintf oc " addx%dw %a = %a, %a\n" (scale_of_shift1_4 s14)
ireg rd ireg rs1 ireg rs2
| Psubw (rd, rs1, rs2) ->
fprintf oc " sbfw %a = %a, %a\n" ireg rd ireg rs2 ireg rs1
- | Psubxw (zshift, rd, rs1, rs2) ->
- let shift = camlint_of_coqint zshift in
- assert(shift >= 1l && shift <= 4l);
- fprintf oc " subx%dw %a = %a, %a\n" (1 lsl (Int32.to_int shift))
+ | Psubxw (s14, rd, rs1, rs2) ->
+ fprintf oc " subx%dw %a = %a, %a\n" (scale_of_shift1_4 s14)
ireg rd ireg rs1 ireg rs2
| Pmulw (rd, rs1, rs2) ->
fprintf oc " mulw %a = %a, %a\n" ireg rd ireg rs1 ireg rs2
@@ -558,17 +560,13 @@ module Target (*: TARGET*) =
| Paddl (rd, rs1, rs2) ->
fprintf oc " addd %a = %a, %a\n" ireg rd ireg rs1 ireg rs2
- | Paddxl (zshift, rd, rs1, rs2) ->
- let shift = camlint_of_coqint zshift in
- assert(shift >= 1l && shift <= 4l);
- fprintf oc " addx%dd %a = %a, %a\n" (1 lsl (Int32.to_int shift))
+ | Paddxl (s14, rd, rs1, rs2) ->
+ fprintf oc " addx%dd %a = %a, %a\n" (scale_of_shift1_4 s14)
ireg rd ireg rs1 ireg rs2
| Psubl (rd, rs1, rs2) ->
fprintf oc " sbfd %a = %a, %a\n" ireg rd ireg rs2 ireg rs1
- | Psubxl (zshift, rd, rs1, rs2) ->
- let shift = camlint_of_coqint zshift in
- assert(shift >= 1l && shift <= 4l);
- fprintf oc " sbfx%dd %a = %a, %a\n" (1 lsl (Int32.to_int shift))
+ | Psubxl (s14, rd, rs1, rs2) ->
+ fprintf oc " sbfx%dd %a = %a, %a\n" (scale_of_shift1_4 s14)
ireg rd ireg rs1 ireg rs2
| Pandl (rd, rs1, rs2) ->
fprintf oc " andd %a = %a, %a\n" ireg rd ireg rs1 ireg rs2
@@ -619,17 +617,13 @@ module Target (*: TARGET*) =
fprintf oc " compw.%a %a = %a, %a\n" icond it ireg rd ireg rs coqint imm
| Paddiw (rd, rs, imm) ->
fprintf oc " addw %a = %a, %a\n" ireg rd ireg rs coqint imm
- | Paddxiw (zshift, rd, rs, imm) ->
- let shift = camlint_of_coqint zshift in
- assert(shift >= 1l && shift <= 4l);
- fprintf oc " addx%dw %a = %a, %a\n" (1 lsl (Int32.to_int shift))
+ | Paddxiw (s14, rd, rs, imm) ->
+ fprintf oc " addx%dw %a = %a, %a\n" (scale_of_shift1_4 s14)
ireg rd ireg rs coqint imm
| Psubiw (rd, rs, imm) ->
fprintf oc " sbfw %a = %a, %a\n" ireg rd ireg rs coqint imm
- | Psubxiw (zshift, rd, rs, imm) ->
- let shift = camlint_of_coqint zshift in
- assert(shift >= 1l && shift <= 4l);
- fprintf oc " sbfx%dw %a = %a, %a\n" (1 lsl (Int32.to_int shift))
+ | Psubxiw (s14, rd, rs, imm) ->
+ fprintf oc " sbfx%dw %a = %a, %a\n" (scale_of_shift1_4 s14)
ireg rd ireg rs coqint imm
| Pmuliw (rd, rs, imm) ->
fprintf oc " mulw %a = %a, %a\n" ireg rd ireg rs coqint imm
@@ -676,17 +670,13 @@ module Target (*: TARGET*) =
fprintf oc " compd.%a %a = %a, %a\n" icond it ireg rd ireg rs coqint64 imm
| Paddil (rd, rs, imm) -> assert Archi.ptr64;
fprintf oc " addd %a = %a, %a\n" ireg rd ireg rs coqint64 imm
- | Paddxil (zshift, rd, rs, imm) ->
- let shift = camlint_of_coqint zshift in
- assert(shift >= 1l && shift <= 4l);
- fprintf oc " addx%dd %a = %a, %a\n" (1 lsl (Int32.to_int shift))
+ | Paddxil (s14, rd, rs, imm) ->
+ fprintf oc " addx%dd %a = %a, %a\n" (scale_of_shift1_4 s14)
ireg rd ireg rs coqint imm
| Psubil (rd, rs, imm) ->
fprintf oc " sbfd %a = %a, %a\n" ireg rd ireg rs coqint64 imm
- | Psubxil (zshift, rd, rs, imm) ->
- let shift = camlint_of_coqint zshift in
- assert(shift >= 1l && shift <= 4l);
- fprintf oc " sbfx%dd %a = %a, %a\n" (1 lsl (Int32.to_int shift))
+ | Psubxil (s14, rd, rs, imm) ->
+ fprintf oc " sbfx%dd %a = %a, %a\n" (scale_of_shift1_4 s14)
ireg rd ireg rs coqint64 imm
| Pmulil (rd, rs, imm) -> assert Archi.ptr64;
fprintf oc " muld %a = %a, %a\n" ireg rd ireg rs coqint64 imm