Skip to content

Commit 67f799c

Browse files
committed
doc: add s390x information to asm.html
Fixes #16362 Change-Id: I676718a1149ed2f3ff80cb031e25de7043805399 Reviewed-on: https://go-review.googlesource.com/25157 Reviewed-by: Rob Pike <[email protected]>
1 parent d025611 commit 67f799c

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

doc/asm.html

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -780,6 +780,64 @@ <h3 id="ppc64">64-bit PowerPC, a.k.a. ppc64</h3>
780780

781781
</ul>
782782

783+
<h3 id="s390x">IBM z/Architecture, a.k.a. s390x</h3>
784+
785+
<p>
786+
The registers <code>R10</code> and <code>R11</code> are reserved.
787+
The assembler uses them to hold temporary values when assembling some instructions.
788+
</p>
789+
790+
<p>
791+
<code>R13</code> points to the <code>g</code> (goroutine) structure.
792+
This register must be referred to as <code>g</code>; the name <code>R13</code> is not recognized.
793+
</p>
794+
795+
<p>
796+
<code>R15</code> points to the stack frame and should typically only be accessed using the
797+
virtual registers <code>SP</code> and <code>FP</code>.
798+
</p>
799+
800+
<p>
801+
Load- and store-multiple instructions operate on a range of registers.
802+
The range of registers is specified by a start register and an end register.
803+
For example, <code>LMG</code> <code>(R9),</code> <code>R5,</code> <code>R7</code> would load
804+
<code>R5</code>, <code>R6</code> and <code>R7</code> with the 64-bit values at
805+
<code>0(R9)</code>, <code>8(R9)</code> and <code>16(R9)</code> respectively.
806+
</p>
807+
808+
<p>
809+
Storage-and-storage instructions such as <code>MVC</code> and <code>XC</code> are written
810+
with the length as the first argument.
811+
For example, <code>XC</code> <code>$8,</code> <code>(R9),</code> <code>(R9)</code> would clear
812+
eight bytes at the address specified in <code>R9</code>.
813+
</p>
814+
815+
<p>
816+
If a vector instruction takes a length or an index as an argument then it will be the
817+
first argument.
818+
For example, <code>VLEIF</code> <code>$1,</code> <code>$16,</code> <code>V2</code> will load
819+
the value sixteen into index one of <code>V2</code>.
820+
Care should be taken when using vector instructions to ensure that they are available at
821+
runtime.
822+
To use vector instructions a machine must have both the vector facility (bit 129 in the
823+
facility list) and kernel support.
824+
Without kernel support a vector instruction will have no effect (it will be equivalent
825+
to a <code>NOP</code> instruction).
826+
</p>
827+
828+
<p>
829+
Addressing modes:
830+
</p>
831+
832+
<ul>
833+
834+
<li>
835+
<code>(R5)(R6*1)</code>: The location at <code>R5</code> plus <code>R6</code>.
836+
It is a scaled mode as on the x86, but the only scale allowed is <code>1</code>.
837+
</li>
838+
839+
</ul>
840+
783841
<h3 id="unsupported_opcodes">Unsupported opcodes</h3>
784842

785843
<p>

0 commit comments

Comments
 (0)