summaryrefslogtreecommitdiff
path: root/powerpc/PrintAsm.ml
diff options
context:
space:
mode:
Diffstat (limited to 'powerpc/PrintAsm.ml')
-rw-r--r--powerpc/PrintAsm.ml46
1 files changed, 19 insertions, 27 deletions
diff --git a/powerpc/PrintAsm.ml b/powerpc/PrintAsm.ml
index a5415f8..9507498 100644
--- a/powerpc/PrintAsm.ml
+++ b/powerpc/PrintAsm.ml
@@ -111,7 +111,13 @@ let constant oc cst =
fprintf oc "(%a)@ha" symbol_offset (s, camlint_of_coqint n)
end
| Csymbol_sda(s, n) ->
- assert false (* treated specially in ireg_with_offset below *)
+ begin match target with
+ | Diab ->
+ fprintf oc "(%a)@sdarx" symbol_offset (s, camlint_of_coqint n)
+ | _ ->
+ assert false
+ end
+
let num_crbit = function
| CRbit_0 -> 0
@@ -164,20 +170,6 @@ let creg oc r =
| MacOS|Diab -> fprintf oc "cr%d" r
| Linux -> fprintf oc "%d" r
-let ireg_with_offset oc (r, cst) =
- match cst with
- | Csymbol_sda(s, n) ->
- begin match target with
- | MacOS ->
- assert false
- | Linux ->
- fprintf oc "(%a)@sdarel(%a)" symbol_offset (s, camlint_of_coqint n) ireg r
- | Diab ->
- fprintf oc "(%a)@sdarx(r0)" symbol_offset (s, camlint_of_coqint n)
- end
- | _ ->
- fprintf oc "%a(%a)" constant cst ireg r
-
let section oc name =
fprintf oc " %s\n" name
@@ -195,7 +187,7 @@ let (text, data, const_data, sdata, float_literal) =
(".text",
".data",
".rodata",
- ".section .sdata,\"aw\",@progbits",
+ ".data", (* unused *)
".section .rodata.cst8,\"aM\",@progbits,8")
| Diab ->
(".text",
@@ -368,11 +360,11 @@ let print_instruction oc labels = function
fprintf oc "%a: .long 0x43300000, 0x00000000\n" label lbl;
section oc text
| Plbz(r1, c, r2) ->
- fprintf oc " lbz %a, %a\n" ireg r1 ireg_with_offset (r2, c)
+ fprintf oc " lbz %a, %a(%a)\n" ireg r1 constant c ireg r2
| Plbzx(r1, r2, r3) ->
fprintf oc " lbzx %a, %a, %a\n" ireg r1 ireg r2 ireg r3
| Plfd(r1, c, r2) ->
- fprintf oc " lfd %a, %a\n" freg r1 ireg_with_offset (r2, c)
+ fprintf oc " lfd %a, %a(%a)\n" freg r1 constant c ireg r2
| Plfdx(r1, r2, r3) ->
fprintf oc " lfdx %a, %a, %a\n" freg r1 ireg r2 ireg r3
| Plfi(r1, c) ->
@@ -386,19 +378,19 @@ let print_instruction oc labels = function
fprintf oc "%a: .long 0x%lx, 0x%lx\n" label lbl nhi nlo;
section oc text
| Plfs(r1, c, r2) ->
- fprintf oc " lfs %a, %a\n" freg r1 ireg_with_offset (r2, c)
+ fprintf oc " lfs %a, %a(%a)\n" freg r1 constant c ireg r2
| Plfsx(r1, r2, r3) ->
fprintf oc " lfsx %a, %a, %a\n" freg r1 ireg r2 ireg r3
| Plha(r1, c, r2) ->
- fprintf oc " lha %a, %a\n" ireg r1 ireg_with_offset (r2, c)
+ fprintf oc " lha %a, %a(%a)\n" ireg r1 constant c ireg r2
| Plhax(r1, r2, r3) ->
fprintf oc " lhax %a, %a, %a\n" ireg r1 ireg r2 ireg r3
| Plhz(r1, c, r2) ->
- fprintf oc " lhz %a, %a\n" ireg r1 ireg_with_offset (r2, c)
+ fprintf oc " lhz %a, %a(%a)\n" ireg r1 constant c ireg r2
| Plhzx(r1, r2, r3) ->
fprintf oc " lhzx %a, %a, %a\n" ireg r1 ireg r2 ireg r3
| Plwz(r1, c, r2) ->
- fprintf oc " lwz %a, %a\n" ireg r1 ireg_with_offset (r2, c)
+ fprintf oc " lwz %a, %a(%a)\n" ireg r1 constant c ireg r2
| Plwzx(r1, r2, r3) ->
fprintf oc " lwzx %a, %a, %a\n" ireg r1 ireg r2 ireg r3
| Pmfcrbit(r1, bit) ->
@@ -445,25 +437,25 @@ let print_instruction oc labels = function
| Psrw(r1, r2, r3) ->
fprintf oc " srw %a, %a, %a\n" ireg r1 ireg r2 ireg r3
| Pstb(r1, c, r2) ->
- fprintf oc " stb %a, %a\n" ireg r1 ireg_with_offset (r2, c)
+ fprintf oc " stb %a, %a(%a)\n" ireg r1 constant c ireg r2
| Pstbx(r1, r2, r3) ->
fprintf oc " stbx %a, %a, %a\n" ireg r1 ireg r2 ireg r3
| Pstfd(r1, c, r2) ->
- fprintf oc " stfd %a, %a\n" freg r1 ireg_with_offset (r2, c)
+ fprintf oc " stfd %a, %a(%a)\n" freg r1 constant c ireg r2
| Pstfdx(r1, r2, r3) ->
fprintf oc " stfdx %a, %a, %a\n" freg r1 ireg r2 ireg r3
| Pstfs(r1, c, r2) ->
fprintf oc " frsp %a, %a\n" freg FPR13 freg r1;
- fprintf oc " stfs %a, %a\n" freg FPR13 ireg_with_offset (r2, c)
+ fprintf oc " stfs %a, %a(%a)\n" freg FPR13 constant c ireg r2
| Pstfsx(r1, r2, r3) ->
fprintf oc " frsp %a, %a\n" freg FPR13 freg r1;
fprintf oc " stfsx %a, %a, %a\n" freg FPR13 ireg r2 ireg r3
| Psth(r1, c, r2) ->
- fprintf oc " sth %a, %a\n" ireg r1 ireg_with_offset (r2, c)
+ fprintf oc " sth %a, %a(%a)\n" ireg r1 constant c ireg r2
| Psthx(r1, r2, r3) ->
fprintf oc " sthx %a, %a, %a\n" ireg r1 ireg r2 ireg r3
| Pstw(r1, c, r2) ->
- fprintf oc " stw %a, %a\n" ireg r1 ireg_with_offset (r2, c)
+ fprintf oc " stw %a, %a(%a)\n" ireg r1 constant c ireg r2
| Pstwx(r1, r2, r3) ->
fprintf oc " stwx %a, %a, %a\n" ireg r1 ireg r2 ireg r3
| Psubfc(r1, r2, r3) ->