File: ppcShuffle.sml

package info (click to toggle)
mlton 20210117%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 58,464 kB
  • sloc: ansic: 27,682; sh: 4,455; asm: 3,569; lisp: 2,879; makefile: 2,347; perl: 1,169; python: 191; pascal: 68; javascript: 7
file content (31 lines) | stat: -rw-r--r-- 1,236 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
functor PPCShuffle(I:PPCINSTR) = struct
  structure I = I
  structure Shuffle = Shuffle(I)

  type t = {tmp:I.ea option, dst:CellsBasis.cell list, src:CellsBasis.cell list}

  fun error msg = MLRiscErrorMsg.error("PPCShuffle",msg)

  (* WARNING: these move operators assume 32 bit addressing is used! 
   * Allen
   *)
  fun move{src=I.Direct rs, dst=I.Direct rd} = 
        [I.arith{oper=I.OR, rt=rd, ra=rs, rb=rs, Rc=false, OE=false}]
    | move{src=I.Direct rs, dst=I.Displace{base, disp, mem}} = 
	[I.st{st=I.STW, rs=rs, ra=base, d=I.LabelOp disp, mem=mem}]
    | move{src=I.Displace{base, disp, mem}, dst=I.Direct rt} = 
	[I.l{ld=I.LWZ, rt=rt, ra=base, d=I.LabelOp disp, mem=mem}]
    | move _ = error "move"

  fun fmove{src=I.FDirect fs, dst=I.FDirect fd} = 
        [I.funary{oper=I.FMR, fb=fs, ft=fd, Rc=false}]
    | fmove{src=I.FDirect fs, dst=I.Displace{base, disp, mem}} = 
	[I.stf{st=I.STFD, fs=fs, ra=base, d=I.LabelOp disp, mem=mem}]
    | fmove{src=I.Displace{base, disp, mem}, dst=I.FDirect ft} =
	[I.lf{ld=I.LFD, ft=ft, ra=base, d=I.LabelOp disp, mem=mem}]
    | fmove _ = error "fmove"

  val shuffle = Shuffle.shuffle {mvInstr=move, ea=I.Direct}

  val shufflefp = Shuffle.shuffle {mvInstr=fmove, ea=I.FDirect}
end