// Copyright 2017 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package arm64 /* Go Assembly for ARM64 Reference Manual 1. Alphabetical list of basic instructions // TODO 2. Alphabetical list of float-point instructions // TODO 3. Alphabetical list of SIMD instructions VADD: Add (scalar) VADD <Vm>, <Vn>, <Vd> Add corresponding low 64-bit elements in <Vm> and <Vn>, place the result into low 64-bit element of <Vd>. VADD: Add (vector). VADD <Vm>.T, <Vn>.<T>, <Vd>.<T> <T> Is an arrangement specifier and can have the following values: 8B, 16B, H4, H8, S2, S4, D2 VADDP: Add Pairwise (vector) VADDP <Vm>.<T>, <Vn>.<T>, <Vd>.<T> <T> Is an arrangement specifier and can have the following values: B8, B16, H4, H8, S2, S4, D2 VADDV: Add across Vector. VADDV <Vn>.<T>, Vd <T> Is an arrangement specifier and can have the following values: 8B, 16B, H4, H8, S4 VAND: Bitwise AND (vector) VAND <Vm>.<T>, <Vn>.<T>, <Vd>.<T> <T> Is an arrangement specifier and can have the following values: B8, B16 VCMEQ: Compare bitwise Equal (vector) VCMEQ <Vm>.<T>, <Vn>.<T>, <Vd>.<T> <T> Is an arrangement specifier and can have the following values: B8, B16, H4, H8, S2, S4, D2 VDUP: Duplicate vector element to vector or scalar. VDUP <Vn>.<Ts>[index], <Vd>.<T> <T> Is an arrangement specifier and can have the following values: 8B, 16B, H4, H8, S2, S4, D2 <Ts> Is an element size specifier and can have the following values: B, H, S, D VEOR: Bitwise exclusive OR (vector, register) VEOR <Vm>.<T>, <Vn>.<T>, <Vd>.<T> <T> Is an arrangement specifier and can have the following values: B8, B16 VLD1: Load multiple single-element structures VLD1 (Rn), [<Vt>.<T>, <Vt2>.<T> ...] // no offset VLD1.P imm(Rn), [<Vt>.<T>, <Vt2>.<T> ...] // immediate offset variant VLD1.P (Rn)(Rm), [<Vt>.<T>, <Vt2>.<T> ...] // register offset variant <T> Is an arrangement specifier and can have the following values: B8, B16, H4, H8, S2, S4, D1, D2 VMOV: move VMOV <Vn>.<T>[index], Rd // Move vector element to general-purpose register. <T> Is a source width specifier and can have the following values: B, H, S (Wd) D (Xd) VMOV Rn, <Vd>.<T> // Duplicate general-purpose register to vector. <T> Is an arrangement specifier and can have the following values: B8, B16, H4, H8, S2, S4 (Wn) D2 (Xn) VMOV <Vn>.<T>, <Vd>.<T> // Move vector. <T> Is an arrangement specifier and can have the following values: B8, B16 VMOV Rn, <Vd>.<T>[index] // Move general-purpose register to a vector element. <T> Is a source width specifier and can have the following values: B, H, S (Wd) D (Xd) VMOV <Vn>.<T>[index], Vn // Move vector element to scalar. <T> Is an element size specifier and can have the following values: B, H, S, D VMOVI: Move Immediate (vector). VMOVI $imm8, <Vd>.<T> <T> is an arrangement specifier and can have the following values: 8B, 16B VMOVS: Load SIMD&FP Register (immediate offset). ARMv8: LDR (immediate, SIMD&FP) Store SIMD&FP register (immediate offset). ARMv8: STR (immediate, SIMD&FP) VMOVS (Rn), Vn VMOVS.W imm(Rn), Vn VMOVS.P imm(Rn), Vn VMOVS Vn, (Rn) VMOVS.W Vn, imm(Rn) VMOVS.P Vn, imm(Rn) VORR: Bitwise inclusive OR (vector, register) VORR <Vm>.<T>, <Vn>.<T>, <Vd>.<T> <T> Is an arrangement specifier and can have the following values: B8, B16 VREV32: Reverse elements in 32-bit words (vector). REV32 <Vn>.<T>, <Vd>.<T> <T> Is an arrangement specifier and can have the following values: B8, B16, H4, H8 VST1: Store multiple single-element structures VST1 [<Vt>.<T>, <Vt2>.<T> ...], (Rn) // no offset VST1.P [<Vt>.<T>, <Vt2>.<T> ...], imm(Rn) // immediate offset variant VST1.P [<Vt>.<T>, <Vt2>.<T> ...], (Rn)(Rm) // register offset variant <T> Is an arrangement specifier and can have the following values: B8, B16, H4, H8, S2, S4, D1, D2 VSUB: Sub (scalar) VSUB <Vm>, <Vn>, <Vd> Subtract low 64-bit element in <Vm> from the correponding element in <Vn>, place the result into low 64-bit element of <Vd>. VUADDLV: Unsigned sum Long across Vector. VUADDLV <Vn>.<T>, Vd <T> Is an arrangement specifier and can have the following values: 8B, 16B, H4, H8, S4 4. Alphabetical list of cryptographic extension instructions SHA1C, SHA1M, SHA1P: SHA1 hash update. SHA1C <Vm>.S4, Vn, Vd SHA1M <Vm>.S4, Vn, Vd SHA1P <Vm>.S4, Vn, Vd SHA1H: SHA1 fixed rotate. SHA1H Vn, Vd SHA1SU0: SHA1 schedule update 0. SHA256SU1: SHA256 schedule update 1. SHA1SU0 <Vm>.S4, <Vn>.S4, <Vd>.S4 SHA256SU1 <Vm>.S4, <Vn>.S4, <Vd>.S4 SHA1SU1: SHA1 schedule update 1. SHA256SU0: SHA256 schedule update 0. SHA1SU1 <Vn>.S4, <Vd>.S4 SHA256SU0 <Vn>.S4, <Vd>.S4 SHA256H, SHA256H2: SHA256 hash update. SHA256H <Vm>.S4, Vn, Vd SHA256H2 <Vm>.S4, Vn, Vd */