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

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

Pseudo-code:

RT <- (FRB)

Special Registers Altered:

CR0          (if Rc=1)

[DRAFT] Floating Move To GPR Single

X-Form

  • fmvtgs RT,FRB (Rc=0)
  • fmvtgs. 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

  • fmvfg FRT,RB (Rc=0)
  • fmvfg. FRT,RB (Rc=1)

Pseudo-code:

FRT <- (RB)

Special Registers Altered:

CR1          (if Rc=1)

[DRAFT] Floating Move From GPR Single

X-Form

  • fmvfgs FRT,RB (Rc=0)
  • fmvfgs. FRT,RB (Rc=1)

Pseudo-code:

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

Special Registers Altered:

CR1          (if Rc=1)