diff options
Diffstat (limited to 'powerpc/PrintAsm.ml')
-rw-r--r-- | powerpc/PrintAsm.ml | 46 |
1 files changed, 19 insertions, 27 deletions
diff --git a/powerpc/PrintAsm.ml b/powerpc/PrintAsm.ml index a5415f81..95074988 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) -> |