Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

performance bug in Interf #2470

Closed
vicuna opened this issue Apr 17, 2004 · 3 comments
Closed

performance bug in Interf #2470

vicuna opened this issue Apr 17, 2004 · 3 comments
Labels

Comments

@vicuna
Copy link

vicuna commented Apr 17, 2004

Original bug ID: 2470
Reporter: administrator
Status: closed
Resolution: fixed
Priority: normal
Severity: minor
Category: ~DO NOT USE (was: OCaml general)

Bug description

Full_Name: Reuben Olinsky
Version: 3.07
OS: Linux
Submission from: roam191-29.student.harvard.edu (140.247.191.29)

I have an .ml file that takes more than 50 CPU seconds to compile on my
700 MHz computer with ocamlopt.opt version 3.07. The .ml file is
3253 lines long and machine-generated (more than 650 short functions
that look similar). I can provide it upon request...

I recompiled ocamlopt.opt, instrumented with gprof profiling, and found
out that about 82.6% of this compilation time (the 50+ seconds) was being
spent in Interf.find_in_bucket. This function seems to be the find
function for a resizable hash table that implements interference
graphs in the native-code compiler's Interf module. I've surmised the
following by reading through the implementation of these graphs...

The hash table resize operation is inefficient. Instead of re-hashing
all values, which might also be pretty slow, the table simply inserts
multiple copies of all elements in the hash table:

Array.blit mat.tbl 0 newtbl 0 len;
Array.blit mat.tbl 0 newtbl len len;

Because it doesn't figure out the actual hash values of elements at
array index n, it goes ahead and places extra copies of them at
array index oldtablesize+n.

Also, there appears to be an issue with the hash function itself:

let hash = (i lxor j) land (Array.length mat.tbl - 1) in

It appears, dynamically, that most edges in this graph are between
nodes whose integer labels are close together (interferences
are most likely localized, right?). So the above hash function,
by simply XORing two values that are likely close together, does
not evenly distribute the keys (graph edges) along [0,hashtablesize).
I've confirmed this by manually instrumenting Interf and reading
output traces.

Although I'm not sure how good it is, I've put together a patch
that reduces the compilation time for the 50+ second test file
by more than half. I've essentially reimplemented the representation
of interference graphs in interf.ml, using an array of interval
'interval lists' (lists of closed intervals over integers).

The patch is included below but I make no guarantees about it;
it's worked fine for me, but I'm sure you're all much more
expert OCaml hackers and might be able to think of ways to
improve it. Feel free to e-mail me if you have any questions...

--

--- orig/interf.ml 2004-04-17 13:06:55.586572288 -0400
+++ patched/interf.ml 2004-04-17 13:07:18.662064280 -0400
@@ -21,46 +21,57 @@

module BitMatrix =
struct

  • type bucket = Nil | Cons of int * int * bucket
  • type interval = Nil
  •              | Ival of int * int * interval
    
  • type t = {
  •  mutable tbl: bucket array;
    
  •  mutable capacity: int;
    
  •  mutable numelts: int
    
  •  mutable tbl: interval array;
    
  •  mutable maxkey: int;
    
    }
  • let create log2_sz =
  •  let sz = 1 lsl log2_sz in
    
  •  { tbl = Array.create sz Nil; capacity = 4 * sz; numelts = 0 }
    
  • let resize mat =
  •  let len = Array.length mat.tbl in
    
  •  let newtbl = Array.make (len * 2) mat.tbl.(0) in
    
  • let create sz = { tbl = Array.create sz Nil; maxkey = sz - 1 }
  • let resize mat minsz =
  •  let len = mat.maxkey + 1 in
    
  •  let maybesz = len * 2 in
    
  •  let newsz = if minsz > maybesz then minsz * 2 else maybesz in
    
  •  let newtbl = Array.make newsz Nil in
     Array.blit mat.tbl 0 newtbl 0 len;
    
  •  Array.blit mat.tbl 0 newtbl len len;
     mat.tbl <- newtbl;
    
  •  mat.capacity <- mat.capacity * 4
    
  •  mat.maxkey <- newsz - 1
    
  • let rec find_in_bucket i j = function
  • let rec find_in_ivallist j = function
    Nil -> false
  •  | Cons(x, y, rem) -> (x = i && y = j) || find_in_bucket i j rem
    
  •  | Ival(x,y, rem) -> j >= x && (j <= y || find_in_ivallist j rem)
    
  • let rec set_in_ivallist j = function

  •    Nil -> Ival(j, j, Nil)
    
  •  | (Ival(lo,hi,(Ival(lo2,hi2,rest) as y)) as s) ->
    
  •      if      j > (hi+1) then Ival(lo,hi,set_in_ivallist j y)
    
  •      else if j < (lo-1) then Ival(j,j ,s)
    
  •      else if j = lo-1   then Ival(j,hi,y)
    
  •      else if j = hi+1   then
    
  •        if j = lo2-1 then Ival(lo,hi2,rest) else Ival(lo,j,y)
    
  •      else s
    
  •  | Ival(lo,hi,Nil) as s ->
    
  •      if      j > (hi+1) then Ival(lo,hi,Ival(j,j,Nil))
    
  •      else if j < (lo-1) then Ival(j ,j ,s)
    
  •      else if j = lo-1   then Ival(j ,hi,Nil)
    
  •      else if j = hi+1   then Ival(lo,j ,Nil)
    
  •      else s
    

    let rec testandset mat i j =
    if j > i then testandset mat j i else begin

  •    let hash = (i lxor j) land (Array.length mat.tbl - 1) in
    
  •    let bucket = mat.tbl.(hash) in
    
  •    find_in_bucket i j bucket ||
    
  •    if i > mat.maxkey then resize mat (i+1);
    
  •    let ivals = mat.tbl.(i) in
    
  •    find_in_ivallist j ivals ||
       begin
    
  •      mat.tbl.(hash) <- Cons(i, j, bucket);
    
  •      mat.numelts <- mat.numelts + 1;
    
  •      if mat.numelts >= mat.capacity then resize mat;
    
  •      mat.tbl.(i) <- set_in_ivallist j ivals;
         false
       end
     end
    

    let rec isset mat i j =

  •  if j > i then
    
  •    isset mat j i
    
  •  else
    
  •    find_in_bucket i j mat.tbl.((i lxor j) land (Array.length mat.tbl -
    

1))

  •  if   j > i then isset mat j i
    
  •  else i <= mat.maxkey && find_in_ivallist j mat.tbl.(i)
    
    end

let build_graph fundecl =

@vicuna
Copy link
Author

vicuna commented Apr 23, 2004

Comment author: administrator

Actually, I wonder if the redundant representation (adjacency lists +
bitmatrix) is really necessary. If the adjacency lists were
represented as sets, we'd get log-time adjacency test...

Unless I misunderstand you, my code did get rid of the bitmatrix in favor
of using adjacency lists (although I didn't end up renaming the BitMatrix
module). But as I mentioned, it was just an idea for consideration,
nothing more...

Would it be possible for you to send me the test file that stresses
the register allocator? I'd like to run a few tests of my own.

Sure, I've attached two files. x86imkasm.ml is the one that stresses
ocamlopt.opt, but right now it needs to see interface file sledlib.mli so
I've included both.

Let me know if there's any other information with which I can provide you!

-reuben


module M (R : Sledlib.RELOC_PRINT) = struct

module Reloc = R

type rel8 = Sledlib.String.t

type rel16 = Sledlib.String.t

type rel32 = Sledlib.String.t

type mem = Sledlib.String.t

type eaddr = Sledlib.String.t

type t = Sledlib.String.t

let print_unsigned_reloc reloc = 
  Sledlib.String.signed_operand reloc

let base_names : string array = Array.of_list 
  ["eAX"; "eCX"; "eDX"; "eBX"; "eSP"; "eBP"; "eSI"; "eDI"]

let print_unsigned_base base = 
  Sledlib.String.getname base_names base "base"

let ss_names : string array = Array.of_list ["1"; "2"; "4"; "8"]

let print_unsigned_ss ss = 
  Sledlib.String.getname ss_names ss "ss"

let print_Mem mem = 
  mem

let print_signed_i8 i8 = 
  Sledlib.String.signed_operand i8

let print_signed_i16 i16 = 
  Sledlib.String.signed_operand i16

let print_signed_i32 i32 = 
  Sledlib.String.signed_operand i32

let print_Eaddr eaddr = 
  eaddr

let print_unsigned_i16 i16 = 
  Sledlib.String.signed_operand i16

let sr16_names : string array = Array.of_list 
  ["??sr16=0?!"; "cs"; "ss"; "ds"; "es"; "fs"; "gs"; "??sr16=7?!"]

let print_unsigned_sr16 sr16 = 
  Sledlib.String.getname sr16_names sr16 "sr16"

let r8_names : string array = Array.of_list 
  ["AL"; "CL"; "DL"; "BL"; "AH"; "CH"; "DH"; "BH"]

let print_unsigned_r8 r8 = 
  Sledlib.String.getname r8_names r8 "r8"

let r16_names : string array = Array.of_list 
  ["AX"; "CX"; "DX"; "BX"; "SP"; "BP"; "SI"; "DI"]

let print_unsigned_r16 r16 = 
  Sledlib.String.getname r16_names r16 "r16"

let print_unsigned_i8 i8 = 
  Sledlib.String.signed_operand i8

let print_unsigned_i32 i32 = 
  Sledlib.String.signed_operand i32

let rel8 reloc = 
  R.to_string print_unsigned_reloc reloc

let rel16 reloc = 
  R.to_string print_unsigned_reloc reloc

let rel32 reloc = 
  R.to_string print_unsigned_reloc reloc

let indir reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string "[") 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "]")

let disp8 d reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat (R.to_string 
            print_unsigned_reloc d) (Sledlib.String.of_string "[")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "]")

let disp32 d reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat (R.to_string 
            print_unsigned_reloc d) (Sledlib.String.of_string "[")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "]")

let abs32 a = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string "[") 
      (R.to_string print_unsigned_reloc a)) (Sledlib.String.of_string "]")

let reg reg = 
  print_unsigned_reloc reg

let index base index ss = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
              (Sledlib.String.of_string "[") (print_unsigned_base base)) 
            (Sledlib.String.of_string "][")) (print_unsigned_base index)) 
        (Sledlib.String.of_string " * ")) (print_unsigned_ss ss)) 
    (Sledlib.String.of_string "]")

let index8 d base index ss = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
              (Sledlib.String.cat (R.to_string print_unsigned_reloc d) 
                (Sledlib.String.of_string "[")) (print_unsigned_base 
                base)) (Sledlib.String.of_string "][")) 
          (print_unsigned_base index)) (Sledlib.String.of_string " * ")) 
      (print_unsigned_ss ss)) (Sledlib.String.of_string "]")

let index32 d base index ss = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
              (Sledlib.String.cat (R.to_string print_unsigned_reloc d) 
                (Sledlib.String.of_string "[")) (print_unsigned_base 
                base)) (Sledlib.String.of_string "][")) 
          (print_unsigned_base index)) (Sledlib.String.of_string " * ")) 
      (print_unsigned_ss ss)) (Sledlib.String.of_string "]")

let shortindex d index ss = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.cat (R.to_string 
                print_unsigned_reloc d) (Sledlib.String.of_string "[")) 
          (print_unsigned_base index)) (Sledlib.String.of_string " * ")) 
      (print_unsigned_ss ss)) (Sledlib.String.of_string "]")

let e mem = 
  print_Mem mem

let addial i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "ADDiAL ") (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let orial i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "ORiAL ") (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let adcial i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "ADCiAL ") (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let sbbial i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "SBBiAL ") (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let andial i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "ANDiAL ") (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let subial i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "SUBiAL ") (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let xorial i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "XORiAL ") (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let cmpial i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "CMPiAL ") (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let addiax i16 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "ADDiAX ") (print_signed_i16 i16)) (Sledlib.String.of_string "\n")

let oriax i16 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "ORiAX ") (print_signed_i16 i16)) (Sledlib.String.of_string "\n")

let adciax i16 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "ADCiAX ") (print_signed_i16 i16)) (Sledlib.String.of_string "\n")

let sbbiax i16 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "SBBiAX ") (print_signed_i16 i16)) (Sledlib.String.of_string "\n")

let andiax i16 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "ANDiAX ") (print_signed_i16 i16)) (Sledlib.String.of_string "\n")

let subiax i16 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "SUBiAX ") (print_signed_i16 i16)) (Sledlib.String.of_string "\n")

let xoriax i16 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "XORiAX ") (print_signed_i16 i16)) (Sledlib.String.of_string "\n")

let cmpiax i16 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "CMPiAX ") (print_signed_i16 i16)) (Sledlib.String.of_string "\n")

let addieax i32 = 
  Sledlib.String.cat (Sledlib.String.cat 
      (Sledlib.String.of_string "ADDiEAX ") (print_signed_i32 i32)) 
    (Sledlib.String.of_string "\n")

let orieax i32 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "ORiEAX ") (print_signed_i32 i32)) (Sledlib.String.of_string "\n")

let adcieax i32 = 
  Sledlib.String.cat (Sledlib.String.cat 
      (Sledlib.String.of_string "ADCiEAX ") (print_signed_i32 i32)) 
    (Sledlib.String.of_string "\n")

let sbbieax i32 = 
  Sledlib.String.cat (Sledlib.String.cat 
      (Sledlib.String.of_string "SBBiEAX ") (print_signed_i32 i32)) 
    (Sledlib.String.of_string "\n")

let andieax i32 = 
  Sledlib.String.cat (Sledlib.String.cat 
      (Sledlib.String.of_string "ANDiEAX ") (print_signed_i32 i32)) 
    (Sledlib.String.of_string "\n")

let subieax i32 = 
  Sledlib.String.cat (Sledlib.String.cat 
      (Sledlib.String.of_string "SUBiEAX ") (print_signed_i32 i32)) 
    (Sledlib.String.of_string "\n")

let xorieax i32 = 
  Sledlib.String.cat (Sledlib.String.cat 
      (Sledlib.String.of_string "XORiEAX ") (print_signed_i32 i32)) 
    (Sledlib.String.of_string "\n")

let cmpieax i32 = 
  Sledlib.String.cat (Sledlib.String.cat 
      (Sledlib.String.of_string "CMPiEAX ") (print_signed_i32 i32)) 
    (Sledlib.String.of_string "\n")

let addib eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADDib ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let orib eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ORib ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let adcib eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADCib ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let sbbib eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SBBib ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let andib eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ANDib ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let subib eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SUBib ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let xorib eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "XORib ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let cmpib eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "CMPib ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let addiw eaddr i16 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADDiw ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i16 i16)) (Sledlib.String.of_string "\n")

let oriw eaddr i16 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ORiw ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i16 i16)) (Sledlib.String.of_string "\n")

let adciw eaddr i16 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADCiw ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i16 i16)) (Sledlib.String.of_string "\n")

let sbbiw eaddr i16 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SBBiw ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i16 i16)) (Sledlib.String.of_string "\n")

let andiw eaddr i16 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ANDiw ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i16 i16)) (Sledlib.String.of_string "\n")

let subiw eaddr i16 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SUBiw ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i16 i16)) (Sledlib.String.of_string "\n")

let xoriw eaddr i16 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "XORiw ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i16 i16)) (Sledlib.String.of_string "\n")

let cmpiw eaddr i16 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "CMPiw ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i16 i16)) (Sledlib.String.of_string "\n")

let addid eaddr i32 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADDid ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i32 i32)) (Sledlib.String.of_string "\n")

let orid eaddr i32 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ORid ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i32 i32)) (Sledlib.String.of_string "\n")

let adcid eaddr i32 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADCid ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i32 i32)) (Sledlib.String.of_string "\n")

let sbbid eaddr i32 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SBBid ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i32 i32)) (Sledlib.String.of_string "\n")

let andid eaddr i32 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ANDid ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i32 i32)) (Sledlib.String.of_string "\n")

let subid eaddr i32 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SUBid ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i32 i32)) (Sledlib.String.of_string "\n")

let xorid eaddr i32 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "XORid ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i32 i32)) (Sledlib.String.of_string "\n")

let cmpid eaddr i32 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "CMPid ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i32 i32)) (Sledlib.String.of_string "\n")

let addiowb eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADDiowb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let addiodb eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADDiodb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let oriowb eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ORiowb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let oriodb eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ORiodb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let adciowb eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADCiowb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let adciodb eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADCiodb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let sbbiowb eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SBBiowb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let sbbiodb eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SBBiodb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let andiowb eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ANDiowb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let andiodb eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ANDiodb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let subiowb eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SUBiowb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let subiodb eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SUBiodb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let xoriowb eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "XORiowb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let xoriodb eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "XORiodb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let cmpiowb eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "CMPiowb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let cmpiodb eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "CMPiodb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let addmrb eaddr reg8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADDmrb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg8)) (Sledlib.String.of_string "\n")

let ormrb eaddr reg8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ORmrb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg8)) (Sledlib.String.of_string "\n")

let adcmrb eaddr reg8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADCmrb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg8)) (Sledlib.String.of_string "\n")

let sbbmrb eaddr reg8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SBBmrb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg8)) (Sledlib.String.of_string "\n")

let andmrb eaddr reg8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ANDmrb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg8)) (Sledlib.String.of_string "\n")

let submrb eaddr reg8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SUBmrb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg8)) (Sledlib.String.of_string "\n")

let xormrb eaddr reg8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "XORmrb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg8)) (Sledlib.String.of_string "\n")

let cmpmrb eaddr reg8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "CMPmrb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg8)) (Sledlib.String.of_string "\n")

let addmrow eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADDmrow ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let addmrod eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADDmrod ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let ormrow eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ORmrow ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let ormrod eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ORmrod ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let adcmrow eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADCmrow ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let adcmrod eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADCmrod ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let sbbmrow eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SBBmrow ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let sbbmrod eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SBBmrod ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let andmrow eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ANDmrow ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let andmrod eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ANDmrod ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let submrow eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SUBmrow ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let submrod eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SUBmrod ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let xormrow eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "XORmrow ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let xormrod eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "XORmrod ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let cmpmrow eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "CMPmrow ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let cmpmrod eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "CMPmrod ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let addrmb reg8 eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADDrmb ") 
          (print_unsigned_reloc reg8)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let orrmb reg8 eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ORrmb ") 
          (print_unsigned_reloc reg8)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let adcrmb reg8 eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADCrmb ") 
          (print_unsigned_reloc reg8)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let sbbrmb reg8 eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SBBrmb ") 
          (print_unsigned_reloc reg8)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let andrmb reg8 eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ANDrmb ") 
          (print_unsigned_reloc reg8)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let subrmb reg8 eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SUBrmb ") 
          (print_unsigned_reloc reg8)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let xorrmb reg8 eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "XORrmb ") 
          (print_unsigned_reloc reg8)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let cmprmb reg8 eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "CMPrmb ") 
          (print_unsigned_reloc reg8)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let addrmow reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADDrmow ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let addrmod reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADDrmod ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let orrmow reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ORrmow ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let orrmod reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ORrmod ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let adcrmow reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADCrmow ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let adcrmod reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ADCrmod ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let sbbrmow reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SBBrmow ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let sbbrmod reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SBBrmod ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let andrmow reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ANDrmow ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let andrmod reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ANDrmod ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let subrmow reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SUBrmow ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let subrmod reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "SUBrmod ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let xorrmow reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "XORrmow ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let xorrmod reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "XORrmod ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let cmprmow reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "CMPrmow ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let cmprmod reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "CMPrmod ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let aaa () = 
  Sledlib.String.cat (Sledlib.String.of_string "AAA") 
    (Sledlib.String.of_string "\n")

let aad () = 
  Sledlib.String.cat (Sledlib.String.of_string "AAD") 
    (Sledlib.String.of_string "\n")

let aam () = 
  Sledlib.String.cat (Sledlib.String.of_string "AAM") 
    (Sledlib.String.of_string "\n")

let aas () = 
  Sledlib.String.cat (Sledlib.String.of_string "AAS") 
    (Sledlib.String.of_string "\n")

let arpl eaddr reg16 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ARPL ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg16)) (Sledlib.String.of_string "\n")

let boundow reg mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BOUNDow ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Mem mem)) (Sledlib.String.of_string "\n")

let boundod reg mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BOUNDod ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Mem mem)) (Sledlib.String.of_string "\n")

let bsfow reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BSFow ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let bsfod reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BSFod ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let bsrow reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BSRow ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let bsrod reg eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BSRod ") 
          (print_unsigned_reloc reg)) (Sledlib.String.of_string ", ")) 
      (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let bswap r32 = 
  Sledlib.String.cat (Sledlib.String.cat 
      (Sledlib.String.of_string "BSWAP ") (print_unsigned_base r32)) 
    (Sledlib.String.of_string "\n")

let btow eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BTow ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let btod eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BTod ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let btiow eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BTiow ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let btiod eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BTiod ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let btcow eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BTCow ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let btcod eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BTCod ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let btciow eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BTCiow ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let btciod eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BTCiod ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let btrow eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BTRow ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let btrod eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BTRod ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let btriow eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BTRiow ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let btriod eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BTRiod ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let btsow eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BTSow ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let btsod eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BTSod ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let btsiow eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BTSiow ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let btsiod eaddr i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "BTSiod ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let call_jvow reloc = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "CALL.Jvow ") (R.to_string print_unsigned_reloc reloc)) 
    (Sledlib.String.of_string "\n")

let call_jvod reloc = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "CALL.Jvod ") (R.to_string print_unsigned_reloc reloc)) 
    (Sledlib.String.of_string "\n")

let call_epow mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "CALL.Epow ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let call_epod mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "CALL.Epod ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let call_apow cs ip = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "CALL.aPow ") 
          (print_unsigned_reloc cs)) (Sledlib.String.of_string ": ")) 
      (print_unsigned_reloc ip)) (Sledlib.String.of_string "\n")

let call_apod cs ip = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "CALL.aPod ") 
          (print_unsigned_reloc cs)) (Sledlib.String.of_string ": ")) 
      (print_unsigned_reloc ip)) (Sledlib.String.of_string "\n")

let call_evow eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "CALL.Evow ") (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let call_evod eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "CALL.Evod ") (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let cbw () = 
  Sledlib.String.cat (Sledlib.String.of_string "CBW") 
    (Sledlib.String.of_string "\n")

let cwde () = 
  Sledlib.String.cat (Sledlib.String.of_string "CWDE") 
    (Sledlib.String.of_string "\n")

let clc () = 
  Sledlib.String.cat (Sledlib.String.of_string "CLC") 
    (Sledlib.String.of_string "\n")

let cld () = 
  Sledlib.String.cat (Sledlib.String.of_string "CLD") 
    (Sledlib.String.of_string "\n")

let cli () = 
  Sledlib.String.cat (Sledlib.String.of_string "CLI") 
    (Sledlib.String.of_string "\n")

let clts () = 
  Sledlib.String.cat (Sledlib.String.of_string "CLTS") 
    (Sledlib.String.of_string "\n")

let cmc () = 
  Sledlib.String.cat (Sledlib.String.of_string "CMC") 
    (Sledlib.String.of_string "\n")

let cmpsbaw () = 
  Sledlib.String.cat (Sledlib.String.of_string "CMPSBaw") 
    (Sledlib.String.of_string "\n")

let cmpsbad () = 
  Sledlib.String.cat (Sledlib.String.of_string "CMPSBad") 
    (Sledlib.String.of_string "\n")

let cmpsvowaw () = 
  Sledlib.String.cat (Sledlib.String.of_string "CMPSvowaw") 
    (Sledlib.String.of_string "\n")

let cmpsvowad () = 
  Sledlib.String.cat (Sledlib.String.of_string "CMPSvowad") 
    (Sledlib.String.of_string "\n")

let cmpsvodaw () = 
  Sledlib.String.cat (Sledlib.String.of_string "CMPSvodaw") 
    (Sledlib.String.of_string "\n")

let cmpsvodad () = 
  Sledlib.String.cat (Sledlib.String.of_string "CMPSvodad") 
    (Sledlib.String.of_string "\n")

let cmpxchg_eb_gb eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "CMPXCHG.Eb.Gb ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let cmpxchg_ev_gvow eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "CMPXCHG.Ev.Gvow ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let cmpxchg_ev_gvod eaddr reg = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "CMPXCHG.Ev.Gvod ") 
          (print_Eaddr eaddr)) (Sledlib.String.of_string ", ")) 
      (print_unsigned_reloc reg)) (Sledlib.String.of_string "\n")

let cmpxchg8b mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "CMPXCHG8B ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let cpuid () = 
  Sledlib.String.cat (Sledlib.String.of_string "CPUID") 
    (Sledlib.String.of_string "\n")

let cwd () = 
  Sledlib.String.cat (Sledlib.String.of_string "CWD") 
    (Sledlib.String.of_string "\n")

let cdq () = 
  Sledlib.String.cat (Sledlib.String.of_string "CDQ") 
    (Sledlib.String.of_string "\n")

let daa () = 
  Sledlib.String.cat (Sledlib.String.of_string "DAA") 
    (Sledlib.String.of_string "\n")

let das () = 
  Sledlib.String.cat (Sledlib.String.of_string "DAS") 
    (Sledlib.String.of_string "\n")

let dec_eb eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "DEC.Eb ") (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let dec_evow eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "DEC.Evow ") (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let dec_evod eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "DEC.Evod ") (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let decow r32 = 
  Sledlib.String.cat (Sledlib.String.cat 
      (Sledlib.String.of_string "DECow ") (print_unsigned_base r32)) 
    (Sledlib.String.of_string "\n")

let decod r32 = 
  Sledlib.String.cat (Sledlib.String.cat 
      (Sledlib.String.of_string "DECod ") (print_unsigned_base r32)) 
    (Sledlib.String.of_string "\n")

let dival eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "DIVAL ") (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let divax eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "DIVAX ") (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let diveax eaddr = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "DIVeAX ") (print_Eaddr eaddr)) (Sledlib.String.of_string "\n")

let enter i16 i8 = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.cat 
        (Sledlib.String.cat (Sledlib.String.of_string "ENTER ") 
          (print_unsigned_i16 i16)) (Sledlib.String.of_string ", ")) 
      (print_signed_i8 i8)) (Sledlib.String.of_string "\n")

let f2xm1 () = 
  Sledlib.String.cat (Sledlib.String.of_string "F2XM1") 
    (Sledlib.String.of_string "\n")

let fabs () = 
  Sledlib.String.cat (Sledlib.String.of_string "FABS") 
    (Sledlib.String.of_string "\n")

let fadd_r32 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FADD.R32 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fadd_r64 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FADD.R64 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fadd_st_sti idx = 
  Sledlib.String.cat 
    (Sledlib.String.cat (Sledlib.String.of_string "FADD.ST.STi ") 
      (print_unsigned_reloc idx)) (Sledlib.String.of_string "\n")

let fadd_sti_st idx = 
  Sledlib.String.cat 
    (Sledlib.String.cat (Sledlib.String.of_string "FADD.STi.St ") 
      (print_unsigned_reloc idx)) (Sledlib.String.of_string "\n")

let faddp_sti_st idx = 
  Sledlib.String.cat 
    (Sledlib.String.cat (Sledlib.String.of_string "FADDP.STi.ST ") 
      (print_unsigned_reloc idx)) (Sledlib.String.of_string "\n")

let fiadd_i32 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FIADD.I32 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fiadd_i16 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FIADD.I16 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fbld mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FBLD ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fbstp mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FBSTP ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fchs () = 
  Sledlib.String.cat (Sledlib.String.of_string "FCHS") 
    (Sledlib.String.of_string "\n")

let fnclex () = 
  Sledlib.String.cat (Sledlib.String.of_string "FNCLEX") 
    (Sledlib.String.of_string "\n")

let fcom_r32 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FCOM.R32 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fcom_r64 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FCOM.R64 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fcomp_r32 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FCOMP.R32 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fcomp_r64 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FCOMP.R64 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fcom_st_sti idx = 
  Sledlib.String.cat 
    (Sledlib.String.cat (Sledlib.String.of_string "FCOM.ST.STi ") 
      (print_unsigned_reloc idx)) (Sledlib.String.of_string "\n")

let fcomp_st_sti idx = 
  Sledlib.String.cat 
    (Sledlib.String.cat (Sledlib.String.of_string "FCOMP.ST.STi ") 
      (print_unsigned_reloc idx)) (Sledlib.String.of_string "\n")

let fcompp () = 
  Sledlib.String.cat (Sledlib.String.of_string "FCOMPP") 
    (Sledlib.String.of_string "\n")

let fcos () = 
  Sledlib.String.cat (Sledlib.String.of_string "FCOS") 
    (Sledlib.String.of_string "\n")

let fdecstp () = 
  Sledlib.String.cat (Sledlib.String.of_string "FDECSTP") 
    (Sledlib.String.of_string "\n")

let fdiv_r32 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FDIV.R32 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fdiv_r64 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FDIV.R64 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fdiv_st_sti idx = 
  Sledlib.String.cat 
    (Sledlib.String.cat (Sledlib.String.of_string "FDIV.ST.STi ") 
      (print_unsigned_reloc idx)) (Sledlib.String.of_string "\n")

let fdiv_sti_st idx = 
  Sledlib.String.cat 
    (Sledlib.String.cat (Sledlib.String.of_string "FDIV.STi.St ") 
      (print_unsigned_reloc idx)) (Sledlib.String.of_string "\n")

let fdivp_sti_st idx = 
  Sledlib.String.cat 
    (Sledlib.String.cat (Sledlib.String.of_string "FDIVP.STi.ST ") 
      (print_unsigned_reloc idx)) (Sledlib.String.of_string "\n")

let fdivr_r32 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FDIVR.R32 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fdivr_r64 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FDIVR.R64 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fdivr_st_sti idx = 
  Sledlib.String.cat 
    (Sledlib.String.cat (Sledlib.String.of_string "FDIVR.ST.STi ") 
      (print_unsigned_reloc idx)) (Sledlib.String.of_string "\n")

let fdivr_sti_st idx = 
  Sledlib.String.cat 
    (Sledlib.String.cat (Sledlib.String.of_string "FDIVR.STi.St ") 
      (print_unsigned_reloc idx)) (Sledlib.String.of_string "\n")

let fdivrp_sti_st idx = 
  Sledlib.String.cat 
    (Sledlib.String.cat (Sledlib.String.of_string "FDIVRP.STi.ST ") 
      (print_unsigned_reloc idx)) (Sledlib.String.of_string "\n")

let ffree idx = 
  Sledlib.String.cat (Sledlib.String.cat 
      (Sledlib.String.of_string "FFREE ") (print_unsigned_reloc idx)) 
    (Sledlib.String.of_string "\n")

let ficom_i32 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FICOM.I32 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let ficom_i16 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FICOM.I16 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let ficomp_i32 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FICOMP.I32 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let ficomp_i16 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FICOMP.I16 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fild_lsi16 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FILD.lsI16 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fild_lsi32 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FILD.lsI32 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fild64 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FILD64 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let finit () = 
  Sledlib.String.cat (Sledlib.String.of_string "FINIT") 
    (Sledlib.String.of_string "\n")

let fist_lsi16 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FIST.lsI16 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fist_lsi32 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FIST.lsI32 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fistp_lsi16 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FISTP.lsI16 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fistp_lsi32 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FISTP.lsI32 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fistp64 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FISTP64 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fld_lsr32 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FLD.lsR32 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fld_lsr64 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FLD.lsR64 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fld80 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FLD80 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fld_sti idx = 
  Sledlib.String.cat (Sledlib.String.cat 
      (Sledlib.String.of_string "FLD.STi ") (print_unsigned_reloc idx)) 
    (Sledlib.String.of_string "\n")

let fld1 () = 
  Sledlib.String.cat (Sledlib.String.of_string "FLD1") 
    (Sledlib.String.of_string "\n")

let fldl2t () = 
  Sledlib.String.cat (Sledlib.String.of_string "FLDL2T") 
    (Sledlib.String.of_string "\n")

let fldl2e () = 
  Sledlib.String.cat (Sledlib.String.of_string "FLDL2E") 
    (Sledlib.String.of_string "\n")

let fldpi () = 
  Sledlib.String.cat (Sledlib.String.of_string "FLDPI") 
    (Sledlib.String.of_string "\n")

let fldlg2 () = 
  Sledlib.String.cat (Sledlib.String.of_string "FLDLG2") 
    (Sledlib.String.of_string "\n")

let fldln2 () = 
  Sledlib.String.cat (Sledlib.String.of_string "FLDLN2") 
    (Sledlib.String.of_string "\n")

let fldz () = 
  Sledlib.String.cat (Sledlib.String.of_string "FLDZ") 
    (Sledlib.String.of_string "\n")

let fldcw mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FLDCW ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fldenv mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FLDENV ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fmul_r32 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FMUL.R32 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fmul_r64 mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FMUL.R64 ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fmul_st_sti idx = 
  Sledlib.String.cat 
    (Sledlib.String.cat (Sledlib.String.of_string "FMUL.ST.STi ") 
      (print_unsigned_reloc idx)) (Sledlib.String.of_string "\n")

let fmul_sti_st idx = 
  Sledlib.String.cat 
    (Sledlib.String.cat (Sledlib.String.of_string "FMUL.STi.St ") 
      (print_unsigned_reloc idx)) (Sledlib.String.of_string "\n")

let fmulp_sti_st idx = 
  Sledlib.String.cat 
    (Sledlib.String.cat (Sledlib.String.of_string "FMULP.STi.ST ") 
      (print_unsigned_reloc idx)) (Sledlib.String.of_string "\n")

let fnop () = 
  Sledlib.String.cat (Sledlib.String.of_string "FNOP") 
    (Sledlib.String.of_string "\n")

let fpatan () = 
  Sledlib.String.cat (Sledlib.String.of_string "FPATAN") 
    (Sledlib.String.of_string "\n")

let fprem () = 
  Sledlib.String.cat (Sledlib.String.of_string "FPREM") 
    (Sledlib.String.of_string "\n")

let fprem1 () = 
  Sledlib.String.cat (Sledlib.String.of_string "FPREM1") 
    (Sledlib.String.of_string "\n")

let fptan () = 
  Sledlib.String.cat (Sledlib.String.of_string "FPTAN") 
    (Sledlib.String.of_string "\n")

let frndint () = 
  Sledlib.String.cat (Sledlib.String.of_string "FRNDINT") 
    (Sledlib.String.of_string "\n")

let frstor mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FRSTOR ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fnsave mem = 
  Sledlib.String.cat (Sledlib.String.cat (Sledlib.String.of_string 
        "FNSAVE ") (print_Mem mem)) (Sledlib.String.of_string "\n")

let fscale () = 
  Sledlib.String.cat (Sledlib.String.of_string "FSCALE") 
    (Sledlib.String.of_string "\n")

let fsin () = 
  Sledlib.String.cat (Sledlib.String.of_string "FSIN") 
    (Sledlib.String.of_string "\n")

let fsincos () = 
  Sledlib.String.cat (Sledlib.String.of_string "FSINCOS") 
    (Sledlib.String.of_string "\n")

let fsqrt () = 
  Sledlib.String.cat (Sledlib.String.of_string "FSQRT") 
    (Sledlib.String.of_string

@vicuna
Copy link
Author

vicuna commented Apr 23, 2004

Comment author: administrator

The hash table resize operation is inefficient. Instead of re-hashing
all values, which might also be pretty slow, the table simply inserts
multiple copies of all elements in the hash table:

Array.blit mat.tbl 0 newtbl 0 len;
Array.blit mat.tbl 0 newtbl len len;

Because it doesn't figure out the actual hash values of elements at
array index n, it goes ahead and places extra copies of them at
array index oldtablesize+n.

Yes, that's intentional. With a good hash function, it makes buckets
twice as long as the re-hashing approach, hence increases average
lookup time by a factor of 2, but avoids the cost of re-hashing. In
other terms, it's a trade-off between the cost of lookups and the cost
of re-sizing the table.

Also, there appears to be an issue with the hash function itself:

let hash = (i lxor j) land (Array.length mat.tbl - 1) in

It appears, dynamically, that most edges in this graph are between
nodes whose integer labels are close together (interferences
are most likely localized, right?). So the above hash function,
by simply XORing two values that are likely close together, does
not evenly distribute the keys (graph edges) along [0,hashtablesize).
I've confirmed this by manually instrumenting Interf and reading
output traces.

Indeed, that's a spectacularly poor choice for a hashing function :-(

Although I'm not sure how good it is, I've put together a patch
that reduces the compilation time for the 50+ second test file
by more than half. I've essentially reimplemented the representation
of interference graphs in interf.ml, using an array of interval
'interval lists' (lists of closed intervals over integers).

Actually, I wonder if the redundant representation (adjacency lists +
bitmatrix) is really necessary. If the adjacency lists were
represented as sets, we'd get log-time adjacency test...

Would it be possible for you to send me the test file that stresses
the register allocator? I'd like to run a few tests of my own.

Thanks for your bug report,

  • Xavier Leroy

@vicuna
Copy link
Author

vicuna commented May 8, 2004

Comment author: administrator

Fixed by XL 2004-05-08

@vicuna vicuna closed this as completed May 8, 2004
@vicuna vicuna added the bug label Mar 19, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant