Floating Move Register

X-Form

  • fmr FRT,FRB (Rc=0)
  • fmr. FRT,FRB (Rc=1)

Pseudo-code:

FRT <- FRB[0:63]

Special Registers Altered:

CR1          (if Rc=1)

Floating Absolute Value Register

X-Form

  • fabs FRT,FRB (Rc=0)
  • fabs. FRT,FRB (Rc=1)

Pseudo-code:

FRT <- 0b0 || FRB[1:63]

Special Registers Altered:

CR1          (if Rc=1)

Floating Negative Absolute Value Register

X-Form

  • fnabs FRT,FRB (Rc=0)
  • fnabs. FRT,FRB (Rc=1)

Pseudo-code:

FRT <- 0b1 || FRB[1:63]

Special Registers Altered:

CR1          (if Rc=1)

Floating Negate Register

X-Form

  • fneg FRT,FRB (Rc=0)
  • fneg. FRT,FRB (Rc=1)

Pseudo-code:

FRT <- ¬FRB[0] || FRB[1:63]

Special Registers Altered:

CR1          (if Rc=1)

Floating Copy Sign Register

X-Form

  • fcpsgn FRT,FRA,FRB (Rc=0)
  • fcpsgn. FRT,FRA,FRB (Rc=1)

Pseudo-code:

FRT <- FRA[0] || FRB[1:63]

Special Registers Altered:

CR1          (if Rc=1)

[DRAFT] Floating Move To GPR

X-Form

  • mffpr RT,FRB (Rc=0)
  • mffpr. RT,FRB (Rc=1)

Pseudo-code:

RT <- (FRB)

Special Registers Altered:

CR0          (if Rc=1)

[DRAFT] Floating Move To GPR Single

X-Form

  • mffprs RT,FRB (Rc=0)
  • mffprs. RT,FRB (Rc=1)

Pseudo-code:

RT <- [0] * (XLEN/2) || SINGLE((FRB))  # SINGLE since that's what stfs uses

Special Registers Altered:

CR0          (if Rc=1)

[DRAFT] Floating Move From GPR

X-Form

  • mtfpr FRT,RB

Pseudo-code:

FRT <- (RB)

Special Registers Altered:

None

[DRAFT] Floating Move From GPR Single

X-Form

  • mtfprs FRT,RB

Pseudo-code:

FRT <- DOUBLE((RB)[XLEN/2:XLEN-1])  # DOUBLE since that's what lfs uses

Special Registers Altered:

None