Scratchpad mode is very similar to normal mode. In terms of the special instructons to be described in later sections, because it is almost identical in overall structure to normal mode, it is also identical in terms of which special instructions are available in that mode.
The format of the basic memory-reference instructions in this mode is:

The opcode space used in Normal Mode for memory-reference instructions performing arithmetic operations involving a memory location and one of the eight general registers or floating-point registers is now used for instructions that perform a load or store operation from the sixty-four supplementary registers of the appropriate type.
Also, a set of three-address register-to-register instructions is provided that are 32 bits in length, and which allow access to the base registers and the various types of scratchpad registers as well as the arithmetic-index registers, the floating-point registers, and the supplementary registers.
Thus, although there are instructions of different lengths, and many of the longer instructions still do not follow the load/store model, in this mode the processor has a full load/store instruction set similar to that of a RISC design, in addition to other non-RISC instructions.
These instructions have eight bits allocated to the opcode, divided between the first two halfwords of the instruction, but the first two bits of the opcode cannot both be 1. This allows these instructions to include additional opcodes for the instructions for the simple floating type, which will be discussed later.
In addition, since the fixed-point instructions of this group normally have the 64-bit supplementary registers as their destinations, a set of 32-bit integer instructions which use the high 32 bits of their destination register is provided. This is inspired by a similar feature recently added by IBM to its z/Architecture systems with the zEnterprise z196. It differs in that instructions working with the 8-bit or 16-bit types are not included, on the one hand, and, on the other, that multiplication and division instructions are added (but not the multiply extensibly and divide extensibly, which are more closely analogous to the multiply and divide instructions on the IBM 360 architecture).
One change to overall structure, which does not affect the availability of the various forms of additional instructions, is that the 16-bit instructions for moving data between the supplementary registers and the general registers, which begin with 010, were removed, and were replaced by the same compact set of memory-reference instructions for the general registers as used in local mode, although with their opcodes altered. This was felt to be reasonable, despite the fact that this mode emphasizes the scratchpad registers over the general registers, because without this change, the general registers would have been so isolated that the group of instructons removed would have had limited relevance in any case.
This compact set of memory-reference instructions is based on that used in compact mode, but with one important change. Since the full set of conditional jump, subroutine jump, and loop instructions is present elsewhere in this mode, it wasn't necessary to reserve space for a reduced subset of those instructions adjacent to the compact memory reference instructions in this mode.
Thus, an additional form of indexed instruction is provided with these characteristics:
The seven-bit opcodes are the same as those of the register-to-register instructions, but with the two most significant bits in the second halfword of the instruction.
The scratchpad registers are used as base registers for these instructions instead of the normal base registers.
These instructions use indirect addressing with post-indexing.
The eleven-bit address field in the instruction is shifted left two or three bits before use, depending on whether 32-bit or 64-bit addressing is in effect.
Thus, on the one hand, the compact memory-reference instructions allow the seven base registers from base register 1 through 7 to each point to an area of up to 65,536 bytes, which can contain simple variables.
On the other hand, instead of trying to fit all the arrays used by a program into these areas, which might mean that a whole base register is used up in order to allow a single huge array to be referenced, each of the seven scratchpad registers from scratchpad register 1 through 7 now points to a list of up to 2,048 addresses of arrays.
Thus, just as programs are free to use a large number of simple variables, they are also free to use a large number of arrays, restricted primarily by the amount of memory available, without the need to reload the base registers.
The cost of this feature, of course, is the extra memory access required due to resorting to indirect addressing. Because of this cost, the simple alternative of an indexed instruction where the index register is specified but the destination register must be register zero is also provided.
The opcodes of the memory-reference and register-to-register instructions in this format are:
Indexed Register Three-Address
------------- ------ ------
0406xx 0x0xxx 0000xx 060xxx 00xxxx SWB Swap Byte
0416xx 0x0xxx 0001xx 060xxx 01xxxx CB Compare Byte
0426xx 0x0xxx 0002xx 060xxx 02xxxx LB Load Byte
0436xx 0x0xxx STB Store Byte
0446xx 0x0xxx 0004xx 060xxx 04xxxx AB Add Byte
0456xx 0x0xxx 0005xx 060xxx 05xxxx SB Subtract Byte
0506xx 0x0xxx 0010xx 060xxx 10xxxx IB Insert Byte
0516xx 0x0xxx 0011xx 060xxx 11xxxx UCB Unsigned Compare Byte
0526xx 0x0xxx 0012xx 060xxx 12xxxx ULB Unsigned Load Byte
0536xx 0x0xxx 0013xx 060xxx 13xxxx XB XOR Byte
0546xx 0x0xxx 0014xx 060xxx 14xxxx NB AND Byte
0556xx 0x0xxx 0015xx 060xxx 15xxxx OB OR Byte
0576xx 0x0xxx 0017xx 060xxx 17xxxx STGB Store if Greater Byte
0407xx 0x0xxx 0020xx 061xxx 00xxxx SWH Swap Halfword
0417xx 0x0xxx 0021xx 061xxx 01xxxx CH Compare Halfword
0427xx 0x0xxx 0022xx 061xxx 02xxxx LH Load Halfword
0437xx 0x0xxx STH Store Halfword
0447xx 0x0xxx 0024xx 061xxx 04xxxx AH Add Halfword
0457xx 0x0xxx 0025xx 061xxx 05xxxx SH Subtract Halfword
0467xx 0x0xxx 0026xx 061xxx 06xxxx MH Multiply Halfword
0477xx 0x0xxx 0027xx 061xxx 07xxxx DH Divide Halfword
0507xx 0x0xxx 0030xx 061xxx 10xxxx IH Insert Halfword
0517xx 0x0xxx 0031xx 061xxx 11xxxx UCH Unsigned Compare Halfword
0527xx 0x0xxx 0032xx 061xxx 12xxxx ULH Unsigned Load Halfword
0537xx 0x0xxx 0033xx 061xxx 13xxxx XH XOR Halfword
0547xx 0x0xxx 0034xx 061xxx 14xxxx NH AND Halfword
0557xx 0x0xxx 0035xx 061xxx 15xxxx OH OR Halfword
0567xx 0x0xxx 0036xx 061xxx 16xxxx MEH Multiply Extensibly Halfword
0577xx 0x0xxx 0037xx 061xxx 17xxxx DEH Divide Extensibly Halfword
0406xx 0x1xxx 0040xx 062xxx 00xxxx SW Swap
0416xx 0x1xxx 0041xx 062xxx 01xxxx C Compare
0426xx 0x1xxx 0042xx 062xxx 02xxxx L Load
0436xx 0x1xxx ST Store
0446xx 0x1xxx 0044xx 062xxx 04xxxx A Add
0456xx 0x1xxx 0045xx 062xxx 05xxxx S Subtract
0466xx 0x1xxx 0046xx 062xxx 06xxxx M Multiply
0476xx 0x1xxx 0047xx 062xxx 07xxxx D Divide
0517xx 0x1xxx 0051xx 062xxx 11xxxx UC Unsigned Compare
0537xx 0x1xxx 0053xx 062xxx 13xxxx X XOR
0547xx 0x1xxx 0054xx 062xxx 14xxxx N AND
0557xx 0x1xxx 0055xx 062xxx 15xxxx O OR
0567xx 0x1xxx 0056xx 062xxx 16xxxx ME Multiply Extensibly
0577xx 0x1xxx 0057xx 062xxx 17xxxx DE Divide Extensibly
0406xx 0x1xxx 0060xx 063xxx 00xxxx SWL Swap Long
0416xx 0x1xxx 0061xx 063xxx 01xxxx CL Compare Long
0426xx 0x1xxx 0062xx 063xxx 02xxxx LL Load Long
0436xx 0x1xxx STL Store Long
0446xx 0x1xxx 0064xx 063xxx 04xxxx AL Add Long
0456xx 0x1xxx 0065xx 063xxx 05xxxx SL Subtract Long
0466xx 0x1xxx 0066xx 063xxx 06xxxx ML Multiply Long
0476xx 0x1xxx 0067xx 063xxx 07xxxx DL Divide Long
0517xx 0x1xxx 0071xx 063xxx 11xxxx UCL Unsigned Compare Long
0537xx 0x1xxx 0073xx 063xxx 13xxxx XL XOR Long
0547xx 0x1xxx 0074xx 063xxx 14xxxx NL AND Long
0557xx 0x1xxx 0075xx 063xxx 15xxxx OL OR Long
0567xx 0x1xxx 0076xx 063xxx 16xxxx MEL Multiply Extensibly Long
0577xx 0x1xxx 0077xx 063xxx 17xxxx DEL Divide Extensibly Long
0406xx 1x0xxx 0100xx 064xxx 00xxxx SWM Swap Medium
0416xx 1x0xxx 0101xx 064xxx 01xxxx CM Compare Medium
0426xx 1x0xxx 0102xx 064xxx 02xxxx LM Load Medium
0436xx 1x0xxx STM Store Medium
0446xx 1x0xxx 0104xx 064xxx 04xxxx AM Add Medium
0456xx 1x0xxx 0105xx 064xxx 05xxxx SM Subtract Medium
0466xx 1x0xxx 0106xx 064xxx 06xxxx MM Multiply Medium
0476xx 1x0xxx 0107xx 064xxx 07xxxx DM Divide Medium
0506xx 1x0xxx 0110xx 064xxx 10xxxx MEUM Multiply Extensibly Unnormalized Medium
0516xx 1x0xxx 0111xx 064xxx 11xxxx DEUM Divide Extensibly Unnormalized Medium
0526xx 1x0xxx 0112xx 064xxx 12xxxx LUM Load Unnormalized Medium
0536xx 1x0xxx 0113xx STUM Store Unnormalized Medium
0546xx 1x0xxx 0114xx 064xxx 14xxxx AUM Add Unnormalized Medium
0556xx 1x0xxx 0115xx 064xxx 15xxxx SUM Subtract Unnormalized Medium
0566xx 1x0xxx 0116xx 064xxx 16xxxx MUM Multiply Unnormalized Medium
0576xx 1x0xxx 0117xx 064xxx 17xxxx DUM Divide Unnormalized Medium
0407xx 1x0xxx 0120xx 065xxx 00xxxx SWF Swap Floating
0417xx 1x0xxx 0121xx 065xxx 01xxxx CF Compare Floating
0427xx 1x0xxx 0122xx 065xxx 02xxxx LF Load Floating
0437xx 1x0xxx STF Store Floating
0447xx 1x0xxx 0124xx 065xxx 04xxxx AF Add Floating
0457xx 1x0xxx 0125xx 065xxx 05xxxx SF Subtract Floating
0467xx 1x0xxx 0126xx 065xxx 06xxxx MF Multiply Floating
0477xx 1x0xxx 0127xx 065xxx 07xxxx DF Divide Floating
0507xx 1x0xxx 0130xx 065xxx 10xxxx MEU Multiply Extensibly Unnormalized
0517xx 1x0xxx 0131xx 065xxx 11xxxx DEU Divide Extensibly Unnormalized
0527xx 1x0xxx 0132xx 065xxx 12xxxx LU Load Unnormalized
0537xx 1x0xxx 0133xx STU Store Unnormalized
0547xx 1x0xxx 0134xx 065xxx 14xxxx AU Add Unnormalized
0557xx 1x0xxx 0135xx 065xxx 15xxxx SU Subtract Unnormalized
0567xx 1x0xxx 0136xx 065xxx 16xxxx MU Multiply Unnormalized
0577xx 1x0xxx 0137xx 065xxx 17xxxx DU Divide Unnormalized
0406xx 1x1xxx 0140xx 066xxx 00xxxx SWD Swap Double
0416xx 1x1xxx 0141xx 066xxx 01xxxx CD Compare Double
0426xx 1x1xxx 0142xx 066xxx 02xxxx LD Load Double
0436xx 1x1xxx STD Store Double
0446xx 1x1xxx 0144xx 066xxx 04xxxx AD Add Double
0456xx 1x1xxx 0145xx 066xxx 05xxxx SD Subtract Double
0466xx 1x1xxx 0146xx 066xxx 06xxxx MD Multiply Double
0476xx 1x1xxx 0147xx 066xxx 07xxxx DD Divide Double
0506xx 1x1xxx 0150xx 066xxx 10xxxx MEUD Multiply Extensibly Unnormalized Double
0516xx 1x1xxx 0151xx 066xxx 11xxxx DEUD Divide Extensibly Unnormalized Double
0526xx 1x1xxx 0152xx 066xxx 12xxxx LUD Load Unnormalized Double
0536xx 1x1xxx 0153xx STUD Store Unnormalized Double
0546xx 1x1xxx 0154xx 066xxx 14xxxx AUD Add Unnormalized Double
0556xx 1x1xxx 0155xx 066xxx 15xxxx SUD Subtract Unnormalized Double
0566xx 1x1xxx 0156xx 066xxx 16xxxx MUD Multiply Unnormalized Double
0576xx 1x1xxx 0157xx 066xxx 17xxxx DUD Divide Unnormalized Double
0407xx 1x1xxx 0160xx 067xxx 00xxxx SWQ Swap Quad
0417xx 1x1xxx 0161xx 067xxx 01xxxx CQ Compare Quad
0427xx 1x1xxx 0162xx 067xxx 02xxxx LQ Load Quad
0437xx 1x1xxx 0163xx STQ Store Quad
0447xx 1x1xxx 0164xx 067xxx 04xxxx AQ Add Quad
0457xx 1x1xxx 0165xx 067xxx 05xxxx SQ Subtract Quad
0467xx 1x1xxx 0166xx 067xxx 06xxxx MQ Multiply Quad
0477xx 1x1xxx 0167xx 067xxx 07xxxx DQ Divide Quad
0507xx 1x1xxx 0170xx 067xxx 10xxxx MEUQ Multiply Extensibly Unnormalized Quad
0517xx 1x1xxx 0171xx 067xxx 11xxxx DEUQ Divide Extensibly Unnormalized Quad
0527xx 1x1xxx 0172xx 067xxx 12xxxx LUQ Load Unnormalized Quad
0537xx 1x1xxx 0173xx STUQ Store Unnormalized Quad
0547xx 1x1xxx 0174xx 067xxx 14xxxx AUQ Add Unnormalized Quad
0557xx 1x1xxx 0175xx 067xxx 15xxxx SUQ Subtract Unnormalized Quad
0567xx 1x1xxx 0176xx 067xxx 16xxxx MUQ Multiply Unnormalized Quad
0577xx 1x1xxx 0177xx 067xxx 17xxxx DUQ Divide Unnormalized Quad
070xxx 00xxxx SWHG Swap High
070xxx 01xxxx CHG Compare High
070xxx 02xxxx LHG Load High
070xxx 03xxxx STHG Store High
070xxx 04xxxx AHG Add High
070xxx 05xxxx SHG Subtract High
070xxx 06xxxx MHG Multiply High
070xxx 07xxxx DHG Divide High
070xxx 11xxxx UCHG Unsigned Compare High
070xxx 13xxxx XHG XOR High
070xxx 14xxxx NHG AND High
070xxx 15xxxx OHG OR High
071xxx 00xxxx SFSWL Simple Floating Swap Halfword
071xxx 01xxxx SFCL Simple Floating Compare Halfword
071xxx 02xxxx SFLL Simple Floating Load Halfword
071xxx 04xxxx SFAL Simple Floating Add Halfword
071xxx 05xxxx SFSL Simple Floating Subtract Halfword
071xxx 06xxxx SFML Simple Floating Multiply Halfword
071xxx 07xxxx SFDL Simple Floating Divide Halfword
071xxx 10xxxx SFMEUH Simple Floating Multiply Extensibly Unnormalized Halfword
071xxx 11xxxx SFDEUH Simple Floating Divide Extensibly Unnormalized Halfword
071xxx 12xxxx SFLUH Simple Floating Load Unnormalized Halfword
071xxx 14xxxx SFAUH Simple Floating Add Unnormalized Halfword
071xxx 15xxxx SFSUH Simple Floating Subtract Unnormalized Halfword
071xxx 16xxxx SFMUH Simple Floating Multiply Unnormalized Halfword
071xxx 17xxxx SFDUH Simple Floating Divide Unnormalized Halfword
072xxx 00xxxx SFSW Simple Floating Swap
072xxx 01xxxx SFC Simple Floating Compare
072xxx 02xxxx SFL Simple Floating Load
072xxx 04xxxx SFA Simple Floating Add
072xxx 05xxxx SFS Simple Floating Subtract
072xxx 06xxxx SFM Simple Floating Multiply
072xxx 07xxxx SFD Simple Floating Divide
072xxx 00xxxx SFMEU Simple Floating Multiply Extensibly Unnormalized
072xxx 01xxxx SFDEU Simple Floating Divide Extensibly Unnormalized
072xxx 02xxxx SFLU Simple Floating Load Unnormalized
072xxx 04xxxx SFAU Simple Floating Add Unnormalized
072xxx 05xxxx SFSU Simple Floating Subtract Unnormalized
072xxx 06xxxx SFMU Simple Floating Multiply Unnormalized
072xxx 07xxxx SFDU Simple Floating Divide Unnormalized
073xxx 00xxxx SFSWL Simple Floating Swap Long
073xxx 01xxxx SFCL Simple Floating Compare Long
073xxx 02xxxx SFLL Simple Floating Load Long
073xxx 04xxxx SFAL Simple Floating Add Long
073xxx 05xxxx SFSL Simple Floating Subtract Long
073xxx 06xxxx SFML Simple Floating Multiply Long
073xxx 07xxxx SFDL Simple Floating Divide Long
073xxx 10xxxx SFMEUL Simple Floating Multiply Extensibly Unnormalized Long
073xxx 11xxxx SFDEUL Simple Floating Divide Extensibly Unnormalized Long
073xxx 12xxxx SFLUL Simple Floating Load Unnormalized Long
073xxx 14xxxx SFAUL Simple Floating Add Unnormalized Long
073xxx 15xxxx SFSUL Simple Floating Subtract Unnormalized Long
073xxx 16xxxx SFMUL Simple Floating Multiply Unnormalized Long
073xxx 17xxxx SFDUL Simple Floating Divide Unnormalized Long