Ignore:
Timestamp:
Jan 18, 2011, 7:23:28 PM (10 years ago)
Author:
sacerdot
Message:

CSC + Nicolas + Dominic:

1) back-porting of changes by Nicolas from the compiler
2) new file ASMCosts to compute the cost of labels
3) several changes here and there to implement 2)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Deliverables/D4.1/Pretty.ml

    r200 r454  
    1010  | `ADDR11 x -> hex_string_of_vect x
    1111  | `ADDR16 x -> hex_string_of_vect x
    12   | `DATA x -> "#" ^ hex_string_of_vect x
    13   | `DATA16 x -> "#" ^ hex_string_of_vect x
     12  | `DATA x -> "#0" ^ hex_string_of_vect x ^ "h"
     13  | `DATA16 x -> "#0" ^ hex_string_of_vect x ^ "h"
    1414  | `BIT x -> "bit " ^ hex_string_of_vect (x: byte)
    1515  | `NBIT x -> "nbit " ^ hex_string_of_vect (x: byte)
     
    1818  | `A_DPTR -> "@DPTR"
    1919  | `A_PC -> "@PC"
    20   | `DIRECT x -> hex_string_of_vect (x: byte)
     20  | `DIRECT x -> "0" ^ (hex_string_of_vect (x: byte)) ^ "h"
    2121  | `EXT_INDIRECT x -> "ext_indirect " ^ string_of_bool x
    22   | `EXT_IND_DPTR -> "ext_indirect_dptr"
     22  | `EXT_IND_DPTR -> "@DPTR"
    2323(* DPM: weird: this seems to be reversed in mcu8051ide: change made. *)
    2424  | `INDIRECT x -> if not x then "@R0" else "@R1"
     
    2929let pp_jump =
    3030 function
    31     `CJNE (`U1 (a1,a2),a3) -> "cjne " ^ pp_arg a1 ^ " " ^ pp_arg a2 ^ " " ^ pp_arg a3
    32   | `CJNE (`U2 (a1,a2),a3) -> "cjne " ^ pp_arg a1 ^ " " ^ pp_arg a2 ^ " " ^ pp_arg a3
    33   | `DJNZ (a1,a2) -> "djnz " ^ pp_arg a1 ^ " " ^ pp_arg a2
    34   | `JB (a1,a2) -> "jb " ^ pp_arg a1 ^ " " ^ pp_arg a2
    35   | `JBC (a1,a2) -> "jbc " ^ pp_arg a1 ^ " " ^ pp_arg a2
     31    `CJNE (`U1 (a1,a2),a3) -> "cjne " ^ pp_arg a1 ^ ", " ^ pp_arg a2 ^ ", " ^ pp_arg a3
     32  | `CJNE (`U2 (a1,a2),a3) -> "cjne " ^ pp_arg a1 ^ ", " ^ pp_arg a2 ^ ", " ^ pp_arg a3
     33  | `DJNZ (a1,a2) -> "djnz " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     34  | `JB (a1,a2) -> "jb " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     35  | `JBC (a1,a2) -> "jbc " ^ pp_arg a1 ^ ", " ^ pp_arg a2
    3636  | `JC a1 -> "jc " ^ pp_arg a1
    37   | `JNB (a1,a2) -> "jnb " ^ pp_arg a1 ^ " " ^ pp_arg a2
     37  | `JNB (a1,a2) -> "jnb " ^ pp_arg a1 ^ ", " ^ pp_arg a2
    3838  | `JNC a1 -> "jnc " ^ pp_arg a1
    3939  | `JNZ a1 -> "jnz " ^ pp_arg a1
     
    4444    `Label l -> l ^ ":"
    4545  | `Cost l -> l ^ ":"
    46   | `Jmp j -> "Jump " ^ j
     46  | `Jmp j -> "Jmp " ^ j
    4747  | `Call j -> "Call " ^ j
    4848  | `WithLabel i -> pp_jump i
     49  | `Begin_fun -> "\n; Begin function"
     50  | `End_fun -> "; End function\n"
    4951  |  (#jump as i) -> pp_jump i
    50   | `Mov (a1,a2) -> "Mov " ^ pp_arg a1 ^ " " ^ a2
     52  | `Mov (a1,a2) -> "mov " ^ pp_arg a1 ^ ", " ^ a2
    5153  | `ACALL a1 -> "acall " ^ pp_arg a1
    52   | `ADD (a1,a2) -> "add " ^ pp_arg a1 ^ " " ^ pp_arg a2
    53   | `ADDC (a1,a2) -> "addc " ^ pp_arg a1 ^ " " ^ pp_arg a2
     54  | `ADD (a1,a2) -> "add " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     55  | `ADDC (a1,a2) -> "addc " ^ pp_arg a1 ^ ", " ^ pp_arg a2
    5456  | `AJMP a1 -> "ajmp " ^ pp_arg a1
    55   | `ANL (`U1 (a1,a2)) -> "anl " ^ pp_arg a1 ^ " " ^ pp_arg a2
    56   | `ANL (`U2 (a1,a2)) -> "anl " ^ pp_arg a1 ^ " " ^ pp_arg a2
    57   | `ANL (`U3 (a1,a2)) -> "anl " ^ pp_arg a1 ^ " " ^ pp_arg a2
     57  | `ANL (`U1 (a1,a2)) -> "anl " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     58  | `ANL (`U2 (a1,a2)) -> "anl " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     59  | `ANL (`U3 (a1,a2)) -> "anl " ^ pp_arg a1 ^ ", " ^ pp_arg a2
    5860  | `CLR a1 -> "clr " ^ pp_arg a1
    5961  | `CPL a1 -> "cpl " ^ pp_arg a1
    6062  | `DA a1 -> "da " ^ pp_arg a1
    6163  | `DEC a1 -> "dec " ^ pp_arg a1
    62   | `DIV (a1,a2) -> "div " ^ pp_arg a1 ^ " " ^ pp_arg a2
     64  | `DIV (a1,a2) -> "div AB"
    6365  | `INC a1 -> "inc " ^ pp_arg a1
    6466  | `JMP a1 -> "jmp " ^ pp_arg a1
    6567  | `LCALL a1 -> "lcall " ^ pp_arg a1
    6668  | `LJMP a1 -> "ljmp " ^ pp_arg a1
    67   | `MOV (`U1 (a1,a2)) -> "mov " ^ pp_arg a1 ^ " " ^ pp_arg a2
    68   | `MOV (`U2 (a1,a2)) -> "mov " ^ pp_arg a1 ^ " " ^ pp_arg a2
    69   | `MOV (`U3 (a1,a2)) -> "mov " ^ pp_arg a1 ^ " " ^ pp_arg a2
    70   | `MOV (`U4 (a1,a2)) -> "mov " ^ pp_arg a1 ^ " " ^ pp_arg a2
    71   | `MOV (`U5 (a1,a2)) -> "mov " ^ pp_arg a1 ^ " " ^ pp_arg a2
    72   | `MOV (`U6 (a1,a2)) -> "mov " ^ pp_arg a1 ^ " " ^ pp_arg a2
    73   | `MOVC (a1,a2) -> "movc " ^ pp_arg a1 ^ " " ^ pp_arg a2
    74   | `MOVX (`U1 (a1,a2)) -> "movx " ^ pp_arg a1 ^ " " ^ pp_arg a2
    75   | `MOVX (`U2 (a1,a2)) -> "movx " ^ pp_arg a1 ^ " " ^ pp_arg a2
    76   | `MUL(a1, a2) -> "mul " ^ pp_arg a1 ^ " " ^ pp_arg a2
     69  | `MOV (`U1 (a1,a2)) -> "mov " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     70  | `MOV (`U2 (a1,a2)) -> "mov " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     71  | `MOV (`U3 (a1,a2)) -> "mov " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     72  | `MOV (`U4 (a1,a2)) -> "mov " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     73  | `MOV (`U5 (a1,a2)) -> "mov " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     74  | `MOV (`U6 (a1,a2)) -> "mov " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     75  | `MOVC (a1,a2) -> "movc " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     76  | `MOVX (`U1 (a1,a2)) -> "movx " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     77  | `MOVX (`U2 (a1,a2)) -> "movx " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     78  | `MUL(a1, a2) -> "mul AB"
    7779  | `NOP -> "nop"
    78   | `ORL (`U1(a1,a2)) -> "orl " ^ pp_arg a1 ^ " " ^ pp_arg a2
    79   | `ORL (`U2(a1,a2)) -> "orl " ^ pp_arg a1 ^ " " ^ pp_arg a2
    80   | `ORL (`U3(a1,a2)) -> "orl " ^ pp_arg a1 ^ " " ^ pp_arg a2
     80  | `ORL (`U1(a1,a2)) -> "orl " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     81  | `ORL (`U2(a1,a2)) -> "orl " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     82  | `ORL (`U3(a1,a2)) -> "orl " ^ pp_arg a1 ^ ", " ^ pp_arg a2
    8183  | `POP a1 -> "pop " ^ pp_arg a1
    8284  | `PUSH a1 -> "push " ^ pp_arg a1
     
    8991  | `SETB a1 -> "setb " ^ pp_arg a1
    9092  | `SJMP a1 -> "sjmp " ^ pp_arg a1
    91   | `SUBB (a1,a2) -> "subb " ^ pp_arg a1 ^ " " ^ pp_arg a2
     93  | `SUBB (a1,a2) -> "subb " ^ pp_arg a1 ^ ", " ^ pp_arg a2
    9294  | `SWAP a1 -> "swap " ^ pp_arg a1
    93   | `XCH (a1,a2) -> "xch " ^ pp_arg a1 ^ " " ^ pp_arg a2
    94   | `XCHD(a1,a2) -> "xchd " ^ pp_arg a1 ^ " " ^ pp_arg a2
    95   | `XRL(`U1(a1,a2)) -> "xrl " ^ pp_arg a1 ^ " " ^ pp_arg a2
    96   | `XRL(`U2(a1,a2)) -> "xrl " ^ pp_arg a1 ^ " " ^ pp_arg a2
     95  | `XCH (a1,a2) -> "xch " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     96  | `XCHD(a1,a2) -> "xchd " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     97  | `XRL(`U1(a1,a2)) -> "xrl " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     98  | `XRL(`U2(a1,a2)) -> "xrl " ^ pp_arg a1 ^ ", " ^ pp_arg a2
     99
     100let print_program p =
     101  let f s i = Printf.sprintf "%s%s\n" s (pp_instruction i) in
     102  "Org 0\n\n" ^ (List.fold_left f "" p.ASM.code) ^ "\nEND\n"
Note: See TracChangeset for help on using the changeset viewer.