File: hppaFreqProps.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 (52 lines) | stat: -rw-r--r-- 2,049 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
(* hppaFreqProps.sml
 *
 * COPYRIGHT (c) 2002 Bell Labs, Lucent Technologies
 *
 * Extract frequency properties from the HP architecture
 * 
 * -- Allen
 *)

functor HppaFreqProps(HppaInstr : HPPAINSTR): FREQUENCY_PROPERTIES =
struct

   structure I = HppaInstr

   val p10 = Probability.percent 10
   val p50 = Probability.percent 50
   val p90 = Probability.percent 90
   val p100 = Probability.always

   fun hppaBranchProb(I.BCOND{cmp=I.COMBT,bc=I.EQ,...}) = p10
     | hppaBranchProb(I.BCOND{cmp=I.COMBF,bc=I.EQ,...}) = p90
     | hppaBranchProb(I.BCOND{cmp=I.COMBT,bc=I.NE,...}) = p90
     | hppaBranchProb(I.BCOND{cmp=I.COMBF,bc=I.NE,...}) = p10
     | hppaBranchProb(I.BCONDI{cmpi=I.COMIBT,bc=I.EQ,...}) = p10
     | hppaBranchProb(I.BCONDI{cmpi=I.COMIBF,bc=I.EQ,...}) = p90
     | hppaBranchProb(I.BCONDI{cmpi=I.COMIBT,bc=I.NE,...}) = p90
     | hppaBranchProb(I.BCONDI{cmpi=I.COMIBF,bc=I.NE,...}) = p10
     | hppaBranchProb(I.BCOND _) = p50 (* default *)
     | hppaBranchProb(I.BCONDI _) = p50 (* default *)
     | hppaBranchProb(I.FBRANCH _) = p50 (* default *)
     (*| hppaBranchProb(I.BB{bc=I.BCLR, p=31, ...}) = 10 
     | hppaBranchProb(I.BB{bc=I.BSET, p=31, ...}) = 90 *)
     | hppaBranchProb(I.BB _) = p50 (* branch on bit *)
     | hppaBranchProb(I.B _) = p100 (* unconditional *)
     | hppaBranchProb(I.BE{labs=[], ...}) = p100 (* escapes *)
     | hppaBranchProb(I.BE{labs,...}) =
	Probability.prob(1, length labs) (* assume equal prob *)
     | hppaBranchProb(I.BV{labs=[],...}) = p100 (* escapes *)
     | hppaBranchProb(I.BV{labs,...}) =
	Probability.prob(1, length labs) (* assume equal prob *)
     | hppaBranchProb(I.BLR{labs,...}) =
	Probability.prob(1, length labs) (* assume equal prob *)
     | hppaBranchProb _ = Probability.never (* non-branch *)
   fun branchProb(I.ANNOTATION{a, i, ...}) =
         (case #peek MLRiscAnnotations.BRANCH_PROB a of
            SOME b => b 
          | NONE => branchProb i
         )
     | branchProb(I.INSTR(i)) = hppaBranchProb(i)
     | branchProb _ = Probability.never

end