File: mipsShuffle.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 (29 lines) | stat: -rw-r--r-- 1,035 bytes parent folder | download | duplicates (5)
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
functor MIPSShuffle(I:MIPSINSTR) : MIPSSHUFFLE = struct
  structure I = I
  structure Shuffle = Shuffle(I)

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

  val mem=I.Region.memory

  val zeroR = I.Reg I.C.r0 

  fun move{src=I.Direct rs, dst=I.Direct rt} = 
        [I.ARITH{oper=I.ADDU, rs=rs, i=zeroR, rt=rt}]
    | move{src=I.Direct rs, dst=I.Displace{base, disp}} = 
	[I.STORE{s=I.SW, rs=rs, b=base, d=I.Imm disp, mem=mem}]
    | move{src=I.Displace{base, disp}, dst=I.Direct rt} = 
	[I.LOAD{l=I.LW, rt=rt, b=base, d=I.Imm disp, mem=mem}]

  fun fmove{src=I.FDirect fs, dst=I.FDirect ft} =
        [I.FUNARY{oper=I.MOV_D, fs=fs, ft=ft}] 
    | fmove{src=I.FDirect fs, dst=I.Displace{base, disp}} = 
	[I.FSTORE{s=I.SDC1, fs=fs, b=base, d=I.Imm disp, mem=mem}]
    | fmove{src=I.Displace{base, disp}, dst=I.FDirect ft} =
	[I.FLOAD{l=I.LDC1, ft=ft, b=base, d=I.Imm disp, mem=mem}]

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

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