add pifpload.mdwn and pifpstore.mdwn,
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 14 Oct 2023 12:52:08 +0000 (13:52 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Fri, 22 Dec 2023 19:26:21 +0000 (19:26 +0000)
TODO the descriptions (english language conversion to post-increment)

openpower/isa/pifpload.mdwn [new file with mode: 0644]
openpower/isa/pifpstore.mdwn [new file with mode: 0644]

diff --git a/openpower/isa/pifpload.mdwn b/openpower/isa/pifpload.mdwn
new file mode 100644 (file)
index 0000000..d2bc418
--- /dev/null
@@ -0,0 +1,251 @@
+<!-- X Instructions here described in PowerISA Version 3.0 B Book 1 -->
+
+<!-- Section 4.6.1 Floating-point storage access instructions. P 140 - 143 -->
+
+# Load Floating-Point Single
+
+D-Form
+
+* lfs FRT,D(RA)
+
+Pseudo-code:
+
+    EA <- (RA|0) + EXTS(D)
+    FRT <- DOUBLE(MEM(EA, 4))
+
+Description:
+
+    Let the effective address (EA) be the sum (RA|0)+D.
+    The word in storage addressed by EA is interpreted as
+    a floating-point single-precision operand. This word is
+    converted to floating-point double format (see
+    page 138) and placed into register FRT.
+
+Special Registers Altered:
+
+    None
+
+# Load Floating-Point Single Indexed
+
+X-Form
+
+* lfsx FRT,RA,RB
+
+Pseudo-code:
+
+    EA <- (RA|0) + (RB)
+    FRT <- DOUBLE(MEM(EA, 4))
+
+Description:
+
+    Let the effective address (EA) be the sum (RA|0)+(RB).
+
+    The word in storage addressed by EA is interpreted as
+    a floating-point single-precision operand. This word is
+    converted to floating-point double format (see
+    page 138) and placed into register FRT.
+
+Special Registers Altered:
+
+    None
+
+# Load Floating-Point Single with Update
+
+D-Form
+
+* lfsu FRT,D(RA)
+
+Pseudo-code:
+
+    EA <- (RA) + EXTS(D)
+    FRT <- DOUBLE(MEM(EA, 4))
+    RA <- EA
+
+Description:
+
+    Let the effective address (EA) be the sum (RA)+D.
+
+    The word in storage addressed by EA is interpreted as
+    a floating-point single-precision operand. This word is
+    converted to floating-point double format (see
+    page 138) and placed into register FRT.
+
+    EA is placed into register RA.
+
+    If RA=0, the instruction form is invalid.
+
+Special Registers Altered:
+
+    None
+
+# Load Floating-Point Single with Update Indexed
+
+X-Form
+
+* lfsux FRT,RA,RB
+
+Pseudo-code:
+
+    EA <- (RA) + (RB)
+    FRT <- DOUBLE(MEM(EA, 4))
+    RA <- EA
+
+Description:
+
+    Let the effective address (EA) be the sum (RA)+(RB).
+
+    The word in storage addressed by EA is interpreted as
+    a floating-point single-precision operand. This word is
+    converted to floating-point double format (see
+    page 138) and placed into register FRT.
+
+    EA is placed into register RA.
+
+    If RA=0, the instruction form is invalid.
+
+Special Registers Altered:
+
+    None
+
+# Load Floating-Point Double
+
+D-Form
+
+* lfd FRT,D(RA)
+
+Pseudo-code:
+
+    EA <- (RA|0) + EXTS(D)
+    FRT <- MEM(EA, 8)
+
+Description:
+
+    Let the effective address (EA) be the sum (RA|0)+D.
+
+    The doubleword in storage addressed by EA is loaded
+    into register FRT.
+
+Special Registers Altered:
+
+    None
+
+# Load Floating-Point Double Indexed
+
+X-Form
+
+* lfdx FRT,RA,RB
+
+Pseudo-code:
+
+    EA <- (RA|0) + (RB)
+    FRT <- MEM(EA, 8)
+
+Description:
+
+    Let the effective address (EA) be the sum (RA|0)+(RB).
+
+    The doubleword in storage addressed by EA is loaded
+    into register FRT.
+
+Special Registers Altered:
+
+    None
+
+# Load Floating-Point Double with Update
+
+D-Form
+
+* lfdu FRT,D(RA)
+
+Pseudo-code:
+
+    EA <- (RA) + EXTS(D)
+    FRT <- MEM(EA, 8)
+    RA <- EA
+
+Description:
+
+    Let the effective address (EA) be the sum (RA)+D.
+
+    The doubleword in storage addressed by EA is loaded
+    into register FRT.
+
+    EA is placed into register RA.
+
+    If RA=0, the instruction form is invalid.
+
+Special Registers Altered:
+
+    None
+
+# Load Floating-Point Double with Update Indexed
+
+X-Form
+
+* lfdux FRT,RA,RB
+
+Pseudo-code:
+
+    EA <- (RA) + (RB)
+    FRT <- MEM(EA, 8)
+    RA <- EA
+
+Description:
+
+    Let the effective address (EA) be the sum (RA)+(RB).
+
+    The doubleword in storage addressed by EA is loaded
+    into register FRT.
+
+    EA is placed into register RA.
+
+    If RA=0, the instruction form is invalid.
+
+Special Registers Altered:
+
+    None
+
+# Load Floating-Point as Integer Word Algebraic Indexed 
+
+X-Form
+
+* lfiwax FRT,RA,RB
+
+Pseudo-code:
+
+    EA <- (RA|0) + (RB)
+    FRT <- EXTS(MEM(EA, 4))
+
+Description:
+
+    Let the effective address (EA) be the sum (RA|0)+(RB).
+
+    The word in storage addressed by EA is loaded into
+    FRT [32:63]. FRT [0:31] are filled with a copy of bit 0 of the
+    loaded word.
+
+Special Registers Altered:
+
+    None
+
+# Load Floating-Point as Integer Word Zero Indexed 
+
+X-Form
+
+* lfiwzx FRT,RA,RB
+
+Pseudo-code:
+
+    EA <- (RA|0) + (RB)
+    FRT <- [0]*32 || MEM(EA, 4)
+
+Description:
+
+    Let the effective address (EA) be the sum (RA|0)+(RB).
+
+    The word in storage addressed by EA is loaded into
+    FRT [32:63]. FRT [0:31] are set to 0.
+
+Special Registers Altered:
+
+    None
diff --git a/openpower/isa/pifpstore.mdwn b/openpower/isa/pifpstore.mdwn
new file mode 100644 (file)
index 0000000..3d7bd77
--- /dev/null
@@ -0,0 +1,238 @@
+<!-- X Instructions here described in PowerISA Version 3.0 B Book 1 -->
+
+<!-- Section 4.6.3 Floating-point store instructions. P 144 - 147 -->
+
+# Store Floating-Point Single
+
+D-Form
+
+* stfs FRS,D(RA)
+
+Pseudo-code:
+
+    EA <- (RA|0) + EXTS(D)
+    MEM(EA, 4)<- SINGLE( (FRS) )
+
+Description:
+
+    Let the effective address (EA) be the sum (RA|0)+D.
+
+    The contents of register FRS are converted to single
+    format (see page 142) and stored into the word in stor-
+    age addressed by EA.
+
+Special Registers Altered:
+
+    None
+
+# Store Floating-Point Single Indexed
+
+X-Form
+
+* stfsx FRS,RA,RB
+
+Pseudo-code:
+
+    EA <- (RA|0) + (RB)
+    MEM(EA, 4)<- SINGLE( (FRS) )
+
+Description:
+
+    Let the effective address (EA) be the sum (RA|0)+(RB).
+
+    The contents of register FRS are converted to single
+    format (see page 142) and stored into the word in stor-
+    age addressed by EA.
+
+Special Registers Altered:
+
+    None
+
+# Store Floating-Point Single with Update
+
+D-Form
+
+* stfsu FRS,D(RA)
+
+Pseudo-code:
+
+    EA <- (RA) + EXTS(D)
+    MEM(EA, 4)<- SINGLE( (FRS) )
+    RA <- EA
+
+Description:
+
+    Let the effective address (EA) be the sum (RA) +D.
+
+    The contents of register FRS are converted to single
+    format (see page 142) and stored into the word in stor-
+    age addressed by EA.
+
+    EA is placed into register RA.
+
+    If RA=0, the instruction form is invalid.
+
+Special Registers Altered:
+
+    None
+
+# Store Floating-Point Single with Update Indexed
+
+X-Form
+
+* stfsux FRS,RA,RB
+
+Pseudo-code:
+
+    EA <- (RA) + (RB)
+    MEM(EA, 4)<- SINGLE( (FRS) )
+    RA <- EA
+
+Description:
+
+    Let the effective address (EA) be the sum (RA) +(RB).
+
+    The contents of register FRS are converted to single
+    format (see page 142) and stored into the word in stor-
+    age addressed by EA.
+
+    EA is placed into register RA.
+
+    If RA=0, the instruction form is invalid.
+
+Special Registers Altered:
+
+    None
+
+# Store Floating-Point Double
+
+D-Form
+
+* stfd FRS,D(RA)
+
+Pseudo-code:
+
+    EA <- (RA|0) + EXTS(D)
+    MEM(EA, 8)<- (FRS) 
+
+Description:
+
+    Let the effective address (EA) be the sum (RA|0)+D.
+
+    The contents of register FRS are stored into the dou-
+    bleword in storage addressed by EA.
+
+Special Registers Altered:
+
+    None
+
+# Store Floating-Point Double Indexed
+
+X-Form
+
+* stfdx FRS,RA,RB
+
+Pseudo-code:
+
+    EA <- (RA|0) + (RB)
+    MEM(EA, 8)<- (FRS) 
+
+Description:
+
+    Let the effective address (EA) be the sum (RA|0)+(RB).
+
+    The contents of register FRS are stored into the dou-
+    bleword in storage addressed by EA.
+
+Special Registers Altered:
+
+    None
+
+# Store Floating-Point Double with Update
+
+D-Form
+
+* stfdu FRS,D(RA)
+
+Pseudo-code:
+
+    EA <- (RA) + EXTS(D)
+    MEM(EA, 8)<- (FRS) 
+    RA <- EA
+
+Description:
+
+    Let the effective address (EA) be the sum (RA)+D.
+
+    The contents of register FRS are stored into the dou-
+    bleword in storage addressed by EA.
+
+    EA is placed into register RA.
+
+    If RA=0, the instruction form is invalid.
+
+Special Registers Altered:
+
+    None
+
+# Store Floating-Point Double with Update Indexed
+
+X-Form
+
+* stfdux FRS,RA,RB
+
+Pseudo-code:
+
+    EA <- (RA) + (RB)
+    MEM(EA, 8)<- (FRS) 
+    RA <- EA
+
+Description:
+
+    Let the effective address (EA) be the sum (RA)+(RB).
+
+    The contents of register FRS are stored into the dou-
+    bleword in storage addressed by EA.
+
+    EA is placed into register RA.
+
+    If RA=0, the instruction form is invalid.
+
+Special Registers Altered:
+
+    None
+
+# Store Floating-Point as Integer Word Indexed 
+
+X-Form
+
+* stfiwx FRS,RA,RB
+
+Pseudo-code:
+
+    b <- (RA|0)
+    EA <- b + (RB)
+    MEM(EA, 8)<- (FRS)[32:63]
+
+Description:
+
+    Let the effective address (EA) be the sum (RA|0)+(RB).
+
+    (FRS)[32:63] are stored, without conversion, into the word
+    in storage addressed by EA.
+
+    If the contents of register FRS were produced, either
+    directly or indirectly, by a Load Floating-Point Single
+    instruction, a single-precision Arithmetic instruction, or
+    frsp, then the value stored is undefined. (The contents
+    of register FRS are produced directly by such an
+    instruction if FRS is the target register for the instruc-
+    tion. The contents of register FRS are produced indi-
+    rectly by such an instruction if FRS is the final target
+    register of a sequence of one or more Floating-Point
+    Move instructions, with the input to the sequence hav-
+    ing been produced directly by such an instruction.)
+
+Special Registers Altered:
+
+    None