NEON Intrinsics
Click on the intrinsic name to display more information about the intrinsic. To search for an intrinsic, enter the name of the intrinsic in the search box. As you type, the matching intrinsics will be displayed.
ARM’s developer website includes documentation, tutorials, support resources and more.
Over the next few months we will be adding more developer resources and documentation for all the products and technologies that ARM provides.
CloseSorry, your browser is not supported. We recommend upgrading your browser. We have done our best to make all the documentation and resources available on old versions of Internet Explorer, but vector image support and the layout may not be optimal. Technical documentation is available as a PDF Download.
Click on the intrinsic name to display more information about the intrinsic. To search for an intrinsic, enter the name of the intrinsic in the search box. As you type, the matching intrinsics will be displayed.
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Floating-point Add (vector). This instruction adds corresponding vector elements in the two source SIMD&FP registers, writes the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FADD Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPAdd(element1, element2, FPCR); V[d] = result;
v7/A32/A64
Floating-point Add (vector). This instruction adds corresponding vector elements in the two source SIMD&FP registers, writes the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FADD Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPAdd(element1, element2, FPCR); V[d] = result;
v7/A32/A64
Floating-point Add (vector). This instruction adds corresponding vector elements in the two source SIMD&FP registers, writes the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FADD Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPAdd(element1, element2, FPCR); V[d] = result;
A64
Floating-point Add (vector). This instruction adds corresponding vector elements in the two source SIMD&FP registers, writes the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FADD Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPAdd(element1, element2, FPCR); V[d] = result;
A64
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Add (vector). This instruction adds corresponding elements in the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
ADD Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Signed Add Long (vector). This instruction adds each vector element in the lower or upper half of the first source SIMD&FP register to the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SADDL Vd.8H,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Add Long (vector). This instruction adds each vector element in the lower or upper half of the first source SIMD&FP register to the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SADDL Vd.4S,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Add Long (vector). This instruction adds each vector element in the lower or upper half of the first source SIMD&FP register to the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SADDL Vd.2D,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Add Long (vector). This instruction adds each vector element in the lower or upper half of the first source SIMD&FP register to the corresponding vector element of the second source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UADDL Vd.8H,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Add Long (vector). This instruction adds each vector element in the lower or upper half of the first source SIMD&FP register to the corresponding vector element of the second source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UADDL Vd.4S,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Add Long (vector). This instruction adds each vector element in the lower or upper half of the first source SIMD&FP register to the corresponding vector element of the second source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UADDL Vd.2D,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Add Long (vector). This instruction adds each vector element in the lower or upper half of the first source SIMD&FP register to the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SADDL2 Vd.8H,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Signed Add Long (vector). This instruction adds each vector element in the lower or upper half of the first source SIMD&FP register to the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SADDL2 Vd.4S,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Signed Add Long (vector). This instruction adds each vector element in the lower or upper half of the first source SIMD&FP register to the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SADDL2 Vd.2D,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Unsigned Add Long (vector). This instruction adds each vector element in the lower or upper half of the first source SIMD&FP register to the corresponding vector element of the second source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UADDL2 Vd.8H,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Unsigned Add Long (vector). This instruction adds each vector element in the lower or upper half of the first source SIMD&FP register to the corresponding vector element of the second source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UADDL2 Vd.4S,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Unsigned Add Long (vector). This instruction adds each vector element in the lower or upper half of the first source SIMD&FP register to the corresponding vector element of the second source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UADDL2 Vd.2D,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Signed Add Wide. This instruction adds vector elements of the first source SIMD&FP register to the corresponding vector elements in the lower or upper half of the second source SIMD&FP register, places the results in a vector, and writes the vector to the SIMD&FP destination register.
SADDW Vd.8H,Vn.8H,Vm.8B
a → Vn.8H
b → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Add Wide. This instruction adds vector elements of the first source SIMD&FP register to the corresponding vector elements in the lower or upper half of the second source SIMD&FP register, places the results in a vector, and writes the vector to the SIMD&FP destination register.
SADDW Vd.4S,Vn.4S,Vm.4H
a → Vn.4S
b → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Add Wide. This instruction adds vector elements of the first source SIMD&FP register to the corresponding vector elements in the lower or upper half of the second source SIMD&FP register, places the results in a vector, and writes the vector to the SIMD&FP destination register.
SADDW Vd.2D,Vn.2D,Vm.2S
a → Vn.2D
b → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Add Wide. This instruction adds the vector elements of the first source SIMD&FP register to the corresponding vector elements in the lower or upper half of the second source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. The vector elements of the destination register and the first source register are twice as long as the vector elements of the second source register. All the values in this instruction are unsigned integer values.
UADDW Vd.8H,Vn.8H,Vm.8B
a → Vn.8H
b → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Add Wide. This instruction adds the vector elements of the first source SIMD&FP register to the corresponding vector elements in the lower or upper half of the second source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. The vector elements of the destination register and the first source register are twice as long as the vector elements of the second source register. All the values in this instruction are unsigned integer values.
UADDW Vd.4S,Vn.4S,Vm.4H
a → Vn.4S
b → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Add Wide. This instruction adds the vector elements of the first source SIMD&FP register to the corresponding vector elements in the lower or upper half of the second source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. The vector elements of the destination register and the first source register are twice as long as the vector elements of the second source register. All the values in this instruction are unsigned integer values.
UADDW Vd.2D,Vn.2D,Vm.2S
a → Vn.2D
b → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Add Wide. This instruction adds vector elements of the first source SIMD&FP register to the corresponding vector elements in the lower or upper half of the second source SIMD&FP register, places the results in a vector, and writes the vector to the SIMD&FP destination register.
SADDW2 Vd.8H,Vn.8H,Vm.16B
a → Vn.8H
b → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Signed Add Wide. This instruction adds vector elements of the first source SIMD&FP register to the corresponding vector elements in the lower or upper half of the second source SIMD&FP register, places the results in a vector, and writes the vector to the SIMD&FP destination register.
SADDW2 Vd.4S,Vn.4S,Vm.8H
a → Vn.4S
b → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Signed Add Wide. This instruction adds vector elements of the first source SIMD&FP register to the corresponding vector elements in the lower or upper half of the second source SIMD&FP register, places the results in a vector, and writes the vector to the SIMD&FP destination register.
SADDW2 Vd.2D,Vn.2D,Vm.4S
a → Vn.2D
b → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Unsigned Add Wide. This instruction adds the vector elements of the first source SIMD&FP register to the corresponding vector elements in the lower or upper half of the second source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. The vector elements of the destination register and the first source register are twice as long as the vector elements of the second source register. All the values in this instruction are unsigned integer values.
UADDW2 Vd.8H,Vn.8H,Vm.16B
a → Vn.8H
b → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Unsigned Add Wide. This instruction adds the vector elements of the first source SIMD&FP register to the corresponding vector elements in the lower or upper half of the second source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. The vector elements of the destination register and the first source register are twice as long as the vector elements of the second source register. All the values in this instruction are unsigned integer values.
UADDW2 Vd.4S,Vn.4S,Vm.8H
a → Vn.4S
b → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Unsigned Add Wide. This instruction adds the vector elements of the first source SIMD&FP register to the corresponding vector elements in the lower or upper half of the second source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. The vector elements of the destination register and the first source register are twice as long as the vector elements of the second source register. All the values in this instruction are unsigned integer values.
UADDW2 Vd.2D,Vn.2D,Vm.4S
a → Vn.2D
b → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Signed Halving Add. This instruction adds corresponding signed integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SHADD Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; Elem[result, e, esize] = sum<esize:1>; V[d] = result;
v7/A32/A64
Signed Halving Add. This instruction adds corresponding signed integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SHADD Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; Elem[result, e, esize] = sum<esize:1>; V[d] = result;
v7/A32/A64
Signed Halving Add. This instruction adds corresponding signed integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SHADD Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; Elem[result, e, esize] = sum<esize:1>; V[d] = result;
v7/A32/A64
Signed Halving Add. This instruction adds corresponding signed integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SHADD Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; Elem[result, e, esize] = sum<esize:1>; V[d] = result;
v7/A32/A64
Signed Halving Add. This instruction adds corresponding signed integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SHADD Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; Elem[result, e, esize] = sum<esize:1>; V[d] = result;
v7/A32/A64
Signed Halving Add. This instruction adds corresponding signed integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SHADD Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; Elem[result, e, esize] = sum<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Halving Add. This instruction adds corresponding unsigned integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UHADD Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; Elem[result, e, esize] = sum<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Halving Add. This instruction adds corresponding unsigned integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UHADD Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; Elem[result, e, esize] = sum<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Halving Add. This instruction adds corresponding unsigned integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UHADD Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; Elem[result, e, esize] = sum<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Halving Add. This instruction adds corresponding unsigned integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UHADD Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; Elem[result, e, esize] = sum<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Halving Add. This instruction adds corresponding unsigned integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UHADD Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; Elem[result, e, esize] = sum<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Halving Add. This instruction adds corresponding unsigned integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UHADD Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; Elem[result, e, esize] = sum<esize:1>; V[d] = result;
v7/A32/A64
Signed Rounding Halving Add. This instruction adds corresponding signed integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SRHADD Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, esize] = (element1+element2+1)<esize:1>; V[d] = result;
v7/A32/A64
Signed Rounding Halving Add. This instruction adds corresponding signed integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SRHADD Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, esize] = (element1+element2+1)<esize:1>; V[d] = result;
v7/A32/A64
Signed Rounding Halving Add. This instruction adds corresponding signed integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SRHADD Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, esize] = (element1+element2+1)<esize:1>; V[d] = result;
v7/A32/A64
Signed Rounding Halving Add. This instruction adds corresponding signed integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SRHADD Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, esize] = (element1+element2+1)<esize:1>; V[d] = result;
v7/A32/A64
Signed Rounding Halving Add. This instruction adds corresponding signed integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SRHADD Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, esize] = (element1+element2+1)<esize:1>; V[d] = result;
v7/A32/A64
Signed Rounding Halving Add. This instruction adds corresponding signed integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SRHADD Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, esize] = (element1+element2+1)<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Rounding Halving Add. This instruction adds corresponding unsigned integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
URHADD Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, esize] = (element1+element2+1)<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Rounding Halving Add. This instruction adds corresponding unsigned integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
URHADD Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, esize] = (element1+element2+1)<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Rounding Halving Add. This instruction adds corresponding unsigned integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
URHADD Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, esize] = (element1+element2+1)<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Rounding Halving Add. This instruction adds corresponding unsigned integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
URHADD Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, esize] = (element1+element2+1)<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Rounding Halving Add. This instruction adds corresponding unsigned integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
URHADD Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, esize] = (element1+element2+1)<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Rounding Halving Add. This instruction adds corresponding unsigned integer values from the two source SIMD&FP registers, shifts each result right one bit, places the results into a vector, and writes the vector to the destination SIMD&FP register.
URHADD Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, esize] = (element1+element2+1)<esize:1>; V[d] = result;
v7/A32/A64
Signed saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQADD Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQADD Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQADD Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQADD Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQADD Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQADD Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQADD Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQADD Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Unsigned saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQADD Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Unsigned saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQADD Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Unsigned saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQADD Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Unsigned saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQADD Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Unsigned saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQADD Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Unsigned saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQADD Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Unsigned saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQADD Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Unsigned saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQADD Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQADD Bd,Bn,Bm
a → Bn
b → Bm
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQADD Hd,Hn,Hm
a → Hn
b → Hm
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQADD Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQADD Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQADD Bd,Bn,Bm
a → Bn
b → Bm
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQADD Hd,Hn,Hm
a → Hn
b → Hm
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQADD Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Add. This instruction adds the values of corresponding elements of the two source SIMD&FP registers, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQADD Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer sum; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); sum = element1 + element2; (Elem[result, e, esize], sat) = SatQ(sum, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Accumulate of Unsigned value. This instruction adds the unsigned integer values of the vector elements in the source SIMD&FP register to corresponding signed integer values of the vector elements in the destination SIMD&FP register, and writes the resulting signed integer values to the destination SIMD&FP register.
SUQADD Vd.8B,Vn.8B
a → Vd.8B
b → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Accumulate of Unsigned value. This instruction adds the unsigned integer values of the vector elements in the source SIMD&FP register to corresponding signed integer values of the vector elements in the destination SIMD&FP register, and writes the resulting signed integer values to the destination SIMD&FP register.
SUQADD Vd.16B,Vn.16B
a → Vd.16B
b → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Accumulate of Unsigned value. This instruction adds the unsigned integer values of the vector elements in the source SIMD&FP register to corresponding signed integer values of the vector elements in the destination SIMD&FP register, and writes the resulting signed integer values to the destination SIMD&FP register.
SUQADD Vd.4H,Vn.4H
a → Vd.4H
b → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Accumulate of Unsigned value. This instruction adds the unsigned integer values of the vector elements in the source SIMD&FP register to corresponding signed integer values of the vector elements in the destination SIMD&FP register, and writes the resulting signed integer values to the destination SIMD&FP register.
SUQADD Vd.8H,Vn.8H
a → Vd.8H
b → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Accumulate of Unsigned value. This instruction adds the unsigned integer values of the vector elements in the source SIMD&FP register to corresponding signed integer values of the vector elements in the destination SIMD&FP register, and writes the resulting signed integer values to the destination SIMD&FP register.
SUQADD Vd.2S,Vn.2S
a → Vd.2S
b → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Accumulate of Unsigned value. This instruction adds the unsigned integer values of the vector elements in the source SIMD&FP register to corresponding signed integer values of the vector elements in the destination SIMD&FP register, and writes the resulting signed integer values to the destination SIMD&FP register.
SUQADD Vd.4S,Vn.4S
a → Vd.4S
b → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Accumulate of Unsigned value. This instruction adds the unsigned integer values of the vector elements in the source SIMD&FP register to corresponding signed integer values of the vector elements in the destination SIMD&FP register, and writes the resulting signed integer values to the destination SIMD&FP register.
SUQADD Dd,Dn
a → Dd
b → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Accumulate of Unsigned value. This instruction adds the unsigned integer values of the vector elements in the source SIMD&FP register to corresponding signed integer values of the vector elements in the destination SIMD&FP register, and writes the resulting signed integer values to the destination SIMD&FP register.
SUQADD Vd.2D,Vn.2D
a → Vd.2D
b → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Accumulate of Unsigned value. This instruction adds the unsigned integer values of the vector elements in the source SIMD&FP register to corresponding signed integer values of the vector elements in the destination SIMD&FP register, and writes the resulting signed integer values to the destination SIMD&FP register.
SUQADD Bd,Bn
a → Bd
b → Bn
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Accumulate of Unsigned value. This instruction adds the unsigned integer values of the vector elements in the source SIMD&FP register to corresponding signed integer values of the vector elements in the destination SIMD&FP register, and writes the resulting signed integer values to the destination SIMD&FP register.
SUQADD Hd,Hn
a → Hd
b → Hn
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Accumulate of Unsigned value. This instruction adds the unsigned integer values of the vector elements in the source SIMD&FP register to corresponding signed integer values of the vector elements in the destination SIMD&FP register, and writes the resulting signed integer values to the destination SIMD&FP register.
SUQADD Sd,Sn
a → Sd
b → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Accumulate of Unsigned value. This instruction adds the unsigned integer values of the vector elements in the source SIMD&FP register to corresponding signed integer values of the vector elements in the destination SIMD&FP register, and writes the resulting signed integer values to the destination SIMD&FP register.
SUQADD Dd,Dn
a → Dd
b → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Accumulate of Signed value. This instruction adds the signed integer values of the vector elements in the source SIMD&FP register to corresponding unsigned integer values of the vector elements in the destination SIMD&FP register, and accumulates the resulting unsigned integer values with the vector elements of the destination SIMD&FP register.
USQADD Vd.8B,Vn.8B
a → Vd.8B
b → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Accumulate of Signed value. This instruction adds the signed integer values of the vector elements in the source SIMD&FP register to corresponding unsigned integer values of the vector elements in the destination SIMD&FP register, and accumulates the resulting unsigned integer values with the vector elements of the destination SIMD&FP register.
USQADD Vd.16B,Vn.16B
a → Vd.16B
b → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Accumulate of Signed value. This instruction adds the signed integer values of the vector elements in the source SIMD&FP register to corresponding unsigned integer values of the vector elements in the destination SIMD&FP register, and accumulates the resulting unsigned integer values with the vector elements of the destination SIMD&FP register.
USQADD Vd.4H,Vn.4H
a → Vd.4H
b → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Accumulate of Signed value. This instruction adds the signed integer values of the vector elements in the source SIMD&FP register to corresponding unsigned integer values of the vector elements in the destination SIMD&FP register, and accumulates the resulting unsigned integer values with the vector elements of the destination SIMD&FP register.
USQADD Vd.8H,Vn.8H
a → Vd.8H
b → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Accumulate of Signed value. This instruction adds the signed integer values of the vector elements in the source SIMD&FP register to corresponding unsigned integer values of the vector elements in the destination SIMD&FP register, and accumulates the resulting unsigned integer values with the vector elements of the destination SIMD&FP register.
USQADD Vd.2S,Vn.2S
a → Vd.2S
b → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Accumulate of Signed value. This instruction adds the signed integer values of the vector elements in the source SIMD&FP register to corresponding unsigned integer values of the vector elements in the destination SIMD&FP register, and accumulates the resulting unsigned integer values with the vector elements of the destination SIMD&FP register.
USQADD Vd.4S,Vn.4S
a → Vd.4S
b → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Accumulate of Signed value. This instruction adds the signed integer values of the vector elements in the source SIMD&FP register to corresponding unsigned integer values of the vector elements in the destination SIMD&FP register, and accumulates the resulting unsigned integer values with the vector elements of the destination SIMD&FP register.
USQADD Dd,Dn
a → Dd
b → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Accumulate of Signed value. This instruction adds the signed integer values of the vector elements in the source SIMD&FP register to corresponding unsigned integer values of the vector elements in the destination SIMD&FP register, and accumulates the resulting unsigned integer values with the vector elements of the destination SIMD&FP register.
USQADD Vd.2D,Vn.2D
a → Vd.2D
b → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Accumulate of Signed value. This instruction adds the signed integer values of the vector elements in the source SIMD&FP register to corresponding unsigned integer values of the vector elements in the destination SIMD&FP register, and accumulates the resulting unsigned integer values with the vector elements of the destination SIMD&FP register.
USQADD Bd,Bn
a → Bd
b → Bn
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Accumulate of Signed value. This instruction adds the signed integer values of the vector elements in the source SIMD&FP register to corresponding unsigned integer values of the vector elements in the destination SIMD&FP register, and accumulates the resulting unsigned integer values with the vector elements of the destination SIMD&FP register.
USQADD Hd,Hn
a → Hd
b → Hn
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Accumulate of Signed value. This instruction adds the signed integer values of the vector elements in the source SIMD&FP register to corresponding unsigned integer values of the vector elements in the destination SIMD&FP register, and accumulates the resulting unsigned integer values with the vector elements of the destination SIMD&FP register.
USQADD Sd,Sn
a → Sd
b → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Accumulate of Signed value. This instruction adds the signed integer values of the vector elements in the source SIMD&FP register to corresponding unsigned integer values of the vector elements in the destination SIMD&FP register, and accumulates the resulting unsigned integer values with the vector elements of the destination SIMD&FP register.
USQADD Dd,Dn
a → Dd
b → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(datasize) operand2 = V[d]; integer op1; integer op2; boolean sat; for e = 0 to elements-1 op1 = Int(Elem[operand, e, esize], !unsigned); op2 = Int(Elem[operand2, e, esize], unsigned); (Elem[result, e, esize], sat) = SatQ(op1 + op2, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
ADDHN Vd.8B,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
ADDHN Vd.4H,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
ADDHN Vd.2S,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
ADDHN Vd.8B,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
ADDHN Vd.4H,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
ADDHN Vd.2S,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
ADDHN2 Vd.16B,Vn.8H,Vm.8H
r → Vd.8B
a → Vn.8H
b → Vm.8H
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
ADDHN2 Vd.8H,Vn.4S,Vm.4S
r → Vd.4H
a → Vn.4S
b → Vm.4S
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
ADDHN2 Vd.4S,Vn.2D,Vm.2D
r → Vd.2S
a → Vn.2D
b → Vm.2D
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
ADDHN2 Vd.16B,Vn.8H,Vm.8H
r → Vd.8B
a → Vn.8H
b → Vm.8H
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
ADDHN2 Vd.8H,Vn.4S,Vm.4S
r → Vd.4H
a → Vn.4S
b → Vm.4S
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
ADDHN2 Vd.4S,Vn.2D,Vm.2D
r → Vd.2S
a → Vn.2D
b → Vm.2D
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Rounding Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RADDHN Vd.8B,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Rounding Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RADDHN Vd.4H,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Rounding Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RADDHN Vd.2S,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Rounding Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RADDHN Vd.8B,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Rounding Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RADDHN Vd.4H,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Rounding Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RADDHN Vd.2S,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Rounding Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RADDHN2 Vd.16B,Vn.8H,Vm.8H
r → Vd.8B
a → Vn.8H
b → Vm.8H
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Rounding Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RADDHN2 Vd.8H,Vn.4S,Vm.4S
r → Vd.4H
a → Vn.4S
b → Vm.4S
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Rounding Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RADDHN2 Vd.4S,Vn.2D,Vm.2D
r → Vd.2S
a → Vn.2D
b → Vm.2D
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Rounding Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RADDHN2 Vd.16B,Vn.8H,Vm.8H
r → Vd.8B
a → Vn.8H
b → Vm.8H
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Rounding Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RADDHN2 Vd.8H,Vn.4S,Vm.4S
r → Vd.4H
a → Vn.4S
b → Vm.4S
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Rounding Add returning High Narrow. This instruction adds each vector element in the first source SIMD&FP register to the corresponding vector element in the second source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RADDHN2 Vd.4S,Vn.2D,Vm.2D
r → Vd.2S
a → Vn.2D
b → Vm.2D
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
v7/A32/A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
v7/A32/A64
Polynomial Multiply. This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
PMUL Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Polynomial Multiply. This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
PMUL Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Vd.2S,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Vd.4S,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Dd,Dn,Vm.D[lane]
a → Dn
v → Vm.1D
0 << lane << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Vd.2D,Vn.2D,Vm.D[lane]
a → Vn.2D
v → Vm.1D
0 << lane << 0
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Sd,Sn,Vm.S[lane]
a → Sn
v → Vm.2S
0 << lane << 1
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Dd,Dn,Vm.D[lane]
a → Dn
v → Vm.1D
0 << lane << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Vd.2S,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Vd.4S,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Dd,Dn,Vm.D[lane]
a → Dn
v → Vm.2D
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Vd.2D,Vn.2D,Vm.D[lane]
a → Vn.2D
v → Vm.2D
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Sd,Sn,Vm.S[lane]
a → Sn
v → Vm.4S
0 << lane << 3
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply extended (by element). This instruction multiplies the floating-point values in the vector elements in the first source SIMD&FP register by the specified floating-point value in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FMULX Dd,Dn,Vm.D[lane]
a → Dn
v → Vm.2D
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(idxdsize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2 = Elem[operand2, index, esize]; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; if mulx_op then Elem[result, e, esize] = FPMulX(element1, element2, FPCR); else Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Divide (vector). This instruction divides the floating-point values in the elements in the first source SIMD&FP register, by the floating-point values in the corresponding elements in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FDIV Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPDiv(element1, element2, FPCR); V[d] = result;
A64
Floating-point Divide (vector). This instruction divides the floating-point values in the elements in the first source SIMD&FP register, by the floating-point values in the corresponding elements in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FDIV Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPDiv(element1, element2, FPCR); V[d] = result;
A64
Floating-point Divide (vector). This instruction divides the floating-point values in the elements in the first source SIMD&FP register, by the floating-point values in the corresponding elements in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FDIV Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPDiv(element1, element2, FPCR); V[d] = result;
A64
Floating-point Divide (vector). This instruction divides the floating-point values in the elements in the first source SIMD&FP register, by the floating-point values in the corresponding elements in the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
FDIV Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPDiv(element1, element2, FPCR); V[d] = result;
A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.4H,Vn.4H,Vm.4H
a → Vd.4H
b → Vn.4H
c → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.8H,Vn.8H,Vm.8H
a → Vd.8H
b → Vn.8H
c → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.2S,Vn.2S,Vm.2S
a → Vd.2S
b → Vn.2S
c → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.4S,Vn.4S,Vm.4S
a → Vd.4S
b → Vn.4S
c → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.4H,Vn.4H,Vm.4H
a → Vd.4H
b → Vn.4H
c → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.8H,Vn.8H,Vm.8H
a → Vd.8H
b → Vn.8H
c → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.2S,Vn.2S,Vm.2S
a → Vd.2S
b → Vn.2S
c → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.4S,Vn.4S,Vm.4S
a → Vd.4S
b → Vn.4S
c → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
RESULT[I] = a[i] + (b[i] * c[i]) for i = 0 to 1
a → N/A
b → N/A
c → N/A
N/A → result
v7/A32/A64
RESULT[I] = a[i] + (b[i] * c[i]) for i = 0 to 3
a → N/A
b → N/A
c → N/A
N/A → result
v7/A32/A64
RESULT[I] = a[i] + (b[i] * c[i]) for i = 0
a → N/A
b → N/A
c → N/A
N/A → result
A64
RESULT[I] = a[i] + (b[i] * c[i]) for i = 0 to 1
a → N/A
b → N/A
c → N/A
N/A → result
A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL Vd.8H,Vn.8B,Vm.8B
a → Vd.8H
b → Vn.8B
c → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL Vd.4S,Vn.4H,Vm.4H
a → Vd.4S
b → Vn.4H
c → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL Vd.2D,Vn.2S,Vm.2S
a → Vd.2D
b → Vn.2S
c → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL Vd.8H,Vn.8B,Vm.8B
a → Vd.8H
b → Vn.8B
c → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL Vd.4S,Vn.4H,Vm.4H
a → Vd.4S
b → Vn.4H
c → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL Vd.2D,Vn.2S,Vm.2S
a → Vd.2D
b → Vn.2S
c → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL2 Vd.8H,Vn.16B,Vm.16B
a → Vd.8H
b → Vn.16B
c → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL2 Vd.4S,Vn.8H,Vm.8H
a → Vd.4S
b → Vn.8H
c → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL2 Vd.2D,Vn.4S,Vm.4S
a → Vd.2D
b → Vn.4S
c → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL2 Vd.8H,Vn.16B,Vm.16B
a → Vd.8H
b → Vn.16B
c → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL2 Vd.4S,Vn.8H,Vm.8H
a → Vd.4S
b → Vn.8H
c → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL2 Vd.2D,Vn.4S,Vm.4S
a → Vd.2D
b → Vn.4S
c → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.4H,Vn.4H,Vm.4H
a → Vd.4H
b → Vn.4H
c → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.8H,Vn.8H,Vm.8H
a → Vd.8H
b → Vn.8H
c → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.2S,Vn.2S,Vm.2S
a → Vd.2S
b → Vn.2S
c → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.4S,Vn.4S,Vm.4S
a → Vd.4S
b → Vn.4S
c → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.4H,Vn.4H,Vm.4H
a → Vd.4H
b → Vn.4H
c → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.8H,Vn.8H,Vm.8H
a → Vd.8H
b → Vn.8H
c → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.2S,Vn.2S,Vm.2S
a → Vd.2S
b → Vn.2S
c → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.4S,Vn.4S,Vm.4S
a → Vd.4S
b → Vn.4S
c → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
RESULT[I] = a[i] - (b[i] * c[i]) for i = 0 to 1
a → N/A
b → N/A
c → N/A
N/A → result
v7/A32/A64
RESULT[I] = a[i] - (b[i] * c[i]) for i = 0 to 3
a → N/A
b → N/A
c → N/A
N/A → result
v7/A32/A64
RESULT[I] = a[i] - (b[i] * c[i]) for i = 0
a → N/A
b → N/A
c → N/A
N/A → result
A64
RESULT[I] = a[i] - (b[i] * c[i]) for i = 0 to 1
a → N/A
b → N/A
c → N/A
N/A → result
A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL Vd.8H,Vn.8B,Vm.8B
a → Vd.8H
b → Vn.8B
c → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL Vd.4S,Vn.4H,Vm.4H
a → Vd.4S
b → Vn.4H
c → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL Vd.2D,Vn.2S,Vm.2S
a → Vd.2D
b → Vn.2S
c → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL Vd.8H,Vn.8B,Vm.8B
a → Vd.8H
b → Vn.8B
c → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL Vd.4S,Vn.4H,Vm.4H
a → Vd.4S
b → Vn.4H
c → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL Vd.2D,Vn.2S,Vm.2S
a → Vd.2D
b → Vn.2S
c → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL2 Vd.8H,Vn.16B,Vm.16B
a → Vd.8H
b → Vn.16B
c → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL2 Vd.4S,Vn.8H,Vm.8H
a → Vd.4S
b → Vn.8H
c → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL2 Vd.2D,Vn.4S,Vm.4S
a → Vd.2D
b → Vn.4S
c → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL2 Vd.8H,Vn.16B,Vm.16B
a → Vd.8H
b → Vn.16B
c → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL2 Vd.4S,Vn.8H,Vm.8H
a → Vd.4S
b → Vn.8H
c → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL2 Vd.2D,Vn.4S,Vm.4S
a → Vd.2D
b → Vn.4S
c → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Vd.2S,Vn.2S,Vm.2S
a → Vd.2S
b → Vn.2S
c → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
v7/A32/A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Vd.4S,Vn.4S,Vm.4S
a → Vd.4S
b → Vn.4S
c → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
v7/A32/A64
Floating-point fused Multiply-Add (scalar). This instruction multiplies the values of the first two SIMD&FP source registers, adds the product to the value of the third SIMD&FP source register, and writes the result to the SIMD&FP destination register.
FMADD Dd,Dn,Dm,Da
a → Da
b → Dn
c → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) result; bits(datasize) operanda = V[a]; bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; result = FPMulAdd(operanda, operand1, operand2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Vd.2D,Vn.2D,Vm.2D
a → Vd.2D
b → Vn.2D
c → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Vd.2S,Vn.2S,Vm.S[lane]
a → Vd.2S
b → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Vd.4S,Vn.4S,Vm.S[lane]
a → Vd.4S
b → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Dd,Dn,Vm.D[lane]
a → Dd
b → Dn
v → Vm.1D
0 << lane << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Vd.2D,Vn.2D,Vm.D[lane]
a → Vd.2D
b → Vn.2D
v → Vm.1D
0 << lane << 0
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Sd,Sn,Vm.S[lane]
a → Sd
b → Sn
v → Vm.2S
0 << lane << 1
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Dd,Dn,Vm.D[lane]
a → Dd
b → Dn
v → Vm.1D
0 << lane << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Vd.2S,Vn.2S,Vm.S[lane]
a → Vd.2S
b → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Vd.4S,Vn.4S,Vm.S[lane]
a → Vd.4S
b → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Dd,Dn,Vm.D[lane]
a → Dd
b → Dn
v → Vm.2D
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Vd.2D,Vn.2D,Vm.D[lane]
a → Vd.2D
b → Vn.2D
v → Vm.2D
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Sd,Sn,Vm.S[lane]
a → Sd
b → Sn
v → Vm.4S
0 << lane << 3
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Dd,Dn,Vm.D[lane]
a → Dd
b → Dn
v → Vm.2D
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Vd.2S,Vn.2S,Vm.2S
a → Vd.2S
b → Vn.2S
c → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
v7/A32/A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Vd.4S,Vn.4S,Vm.4S
a → Vd.4S
b → Vn.4S
c → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
v7/A32/A64
Floating-point Fused Multiply-Subtract (scalar). This instruction multiplies the values of the first two SIMD&FP source registers, negates the product, adds that to the value of the third SIMD&FP source register, and writes the result to the SIMD&FP destination register.
FMSUB Dd,Dn,Dm,Da
a → Da
b → Dn
c → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) result; bits(datasize) operanda = V[a]; bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; operand1 = FPNeg(operand1); result = FPMulAdd(operanda, operand1, operand2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Vd.2D,Vn.2D,Vm.2D
a → Vd.2D
b → Vn.2D
c → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Vd.2S,Vn.2S,Vm.S[lane]
a → Vd.2S
b → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Vd.4S,Vn.4S,Vm.S[lane]
a → Vd.4S
b → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Dd,Dn,Vm.D[lane]
a → Dd
b → Dn
v → Vm.1D
0 << lane << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Vd.2D,Vn.2D,Vm.D[lane]
a → Vd.2D
b → Vn.2D
v → Vm.1D
0 << lane << 0
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Sd,Sn,Vm.S[lane]
a → Sd
b → Sn
v → Vm.2S
0 << lane << 1
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Dd,Dn,Vm.D[lane]
a → Dd
b → Dn
v → Vm.1D
0 << lane << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Vd.2S,Vn.2S,Vm.S[lane]
a → Vd.2S
b → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Vd.4S,Vn.4S,Vm.S[lane]
a → Vd.4S
b → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Dd,Dn,Vm.D[lane]
a → Dd
b → Dn
v → Vm.2D
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Vd.2D,Vn.2D,Vm.D[lane]
a → Vd.2D
b → Vn.2D
v → Vm.2D
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Sd,Sn,Vm.S[lane]
a → Sd
b → Sn
v → Vm.4S
0 << lane << 3
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Dd,Dn,Vm.D[lane]
a → Dd
b → Dn
v → Vm.2D
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Hd,Hn,Hm
a → Hn
b → Hm
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Hd,Hn,Hm
a → Hn
b → Hm
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL Vd.4S,Vn.4H,Vm.4H
a → Vd.4S
b → Vn.4H
c → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL Vd.2D,Vn.2S,Vm.2S
a → Vd.2D
b → Vn.2S
c → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL Sd,Hn,Hm
a → Sd
b → Hn
c → Hm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL Dd,Sn,Sm
a → Dd
b → Sn
c → Sm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL2 Vd.4S,Vn.8H,Vm.8H
a → Vd.4S
b → Vn.8H
c → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL2 Vd.2D,Vn.4S,Vm.4S
a → Vd.2D
b → Vn.4S
c → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL Vd.4S,Vn.4H,Vm.4H
a → Vd.4S
b → Vn.4H
c → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL Vd.2D,Vn.2S,Vm.2S
a → Vd.2D
b → Vn.2S
c → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL Sd,Hn,Hm
a → Sd
b → Hn
c → Hm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL Dd,Sn,Sm
a → Dd
b → Sn
c → Sm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL2 Vd.4S,Vn.8H,Vm.8H
a → Vd.4S
b → Vn.8H
c → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL2 Vd.2D,Vn.4S,Vm.4S
a → Vd.2D
b → Vn.4S
c → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL Vd.8H,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL Vd.4S,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL Vd.2D,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL Vd.8H,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL Vd.4S,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL Vd.2D,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
v7/A32/A64
Polynomial Multiply Long. This instruction multiplies corresponding elements in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
PMULL Vd.8H,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, 2*esize] = PolynomialMult(element1, element2); V[d] = result;
v7/A32/A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL2 Vd.8H,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL2 Vd.4S,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL2 Vd.2D,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL2 Vd.8H,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL2 Vd.4S,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL2 Vd.2D,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Polynomial Multiply Long. This instruction multiplies corresponding elements in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
PMULL2 Vd.8H,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, 2*esize] = PolynomialMult(element1, element2); V[d] = result;
A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL Vd.4S,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL Vd.2D,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL Sd,Hn,Hm
a → Hn
b → Hm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL Dd,Sn,Sm
a → Sn
b → Sm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL2 Vd.4S,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL2 Vd.2D,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Floating-point Subtract (vector). This instruction subtracts the elements in the vector in the second source SIMD&FP register, from the corresponding elements in the vector in the first source SIMD&FP register, places each result into elements of a vector, and writes the vector to the destination SIMD&FP register.
FSUB Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) diff; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; diff = FPSub(element1, element2, FPCR); Elem[result, e, esize] = if abs then FPAbs(diff) else diff; V[d] = result;
v7/A32/A64
Floating-point Subtract (vector). This instruction subtracts the elements in the vector in the second source SIMD&FP register, from the corresponding elements in the vector in the first source SIMD&FP register, places each result into elements of a vector, and writes the vector to the destination SIMD&FP register.
FSUB Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) diff; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; diff = FPSub(element1, element2, FPCR); Elem[result, e, esize] = if abs then FPAbs(diff) else diff; V[d] = result;
v7/A32/A64
Floating-point Subtract (vector). This instruction subtracts the elements in the vector in the second source SIMD&FP register, from the corresponding elements in the vector in the first source SIMD&FP register, places each result into elements of a vector, and writes the vector to the destination SIMD&FP register.
FSUB Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) diff; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; diff = FPSub(element1, element2, FPCR); Elem[result, e, esize] = if abs then FPAbs(diff) else diff; V[d] = result;
A64
Floating-point Subtract (vector). This instruction subtracts the elements in the vector in the second source SIMD&FP register, from the corresponding elements in the vector in the first source SIMD&FP register, places each result into elements of a vector, and writes the vector to the destination SIMD&FP register.
FSUB Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) diff; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; diff = FPSub(element1, element2, FPCR); Elem[result, e, esize] = if abs then FPAbs(diff) else diff; V[d] = result;
A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Subtract (vector). This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
SUB Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then Elem[result, e, esize] = element1 - element2; else Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Signed Subtract Long. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are twice as long as the source vector elements.
SSUBL Vd.8H,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Subtract Long. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are twice as long as the source vector elements.
SSUBL Vd.4S,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Subtract Long. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are twice as long as the source vector elements.
SSUBL Vd.2D,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Subtract Long. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The destination vector elements are twice as long as the source vector elements.
USUBL Vd.8H,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Subtract Long. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The destination vector elements are twice as long as the source vector elements.
USUBL Vd.4S,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Subtract Long. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The destination vector elements are twice as long as the source vector elements.
USUBL Vd.2D,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Subtract Long. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are twice as long as the source vector elements.
SSUBL2 Vd.8H,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Signed Subtract Long. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are twice as long as the source vector elements.
SSUBL2 Vd.4S,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Signed Subtract Long. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are twice as long as the source vector elements.
SSUBL2 Vd.2D,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Unsigned Subtract Long. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The destination vector elements are twice as long as the source vector elements.
USUBL2 Vd.8H,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Unsigned Subtract Long. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The destination vector elements are twice as long as the source vector elements.
USUBL2 Vd.4S,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Unsigned Subtract Long. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The destination vector elements are twice as long as the source vector elements.
USUBL2 Vd.2D,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Signed Subtract Wide. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. All the values in this instruction are signed integer values.
SSUBW Vd.8H,Vn.8H,Vm.8B
a → Vn.8H
b → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Subtract Wide. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. All the values in this instruction are signed integer values.
SSUBW Vd.4S,Vn.4S,Vm.4H
a → Vn.4S
b → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Subtract Wide. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. All the values in this instruction are signed integer values.
SSUBW Vd.2D,Vn.2D,Vm.2S
a → Vn.2D
b → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Subtract Wide. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element in the lower or upper half of the first source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. All the values in this instruction are signed integer values.
USUBW Vd.8H,Vn.8H,Vm.8B
a → Vn.8H
b → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Subtract Wide. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element in the lower or upper half of the first source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. All the values in this instruction are signed integer values.
USUBW Vd.4S,Vn.4S,Vm.4H
a → Vn.4S
b → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Subtract Wide. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element in the lower or upper half of the first source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. All the values in this instruction are signed integer values.
USUBW Vd.2D,Vn.2D,Vm.2S
a → Vn.2D
b → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Subtract Wide. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. All the values in this instruction are signed integer values.
SSUBW2 Vd.8H,Vn.8H,Vm.16B
a → Vn.8H
b → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Signed Subtract Wide. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. All the values in this instruction are signed integer values.
SSUBW2 Vd.4S,Vn.4S,Vm.8H
a → Vn.4S
b → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Signed Subtract Wide. This instruction subtracts each vector element in the lower or upper half of the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. All the values in this instruction are signed integer values.
SSUBW2 Vd.2D,Vn.2D,Vm.4S
a → Vn.2D
b → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Unsigned Subtract Wide. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element in the lower or upper half of the first source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. All the values in this instruction are signed integer values.
USUBW2 Vd.8H,Vn.8H,Vm.16B
a → Vn.8H
b → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Unsigned Subtract Wide. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element in the lower or upper half of the first source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. All the values in this instruction are signed integer values.
USUBW2 Vd.4S,Vn.4S,Vm.8H
a → Vn.4S
b → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Unsigned Subtract Wide. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element in the lower or upper half of the first source SIMD&FP register, places the result in a vector, and writes the vector to the SIMD&FP destination register. All the values in this instruction are signed integer values.
USUBW2 Vd.2D,Vn.2D,Vm.4S
a → Vn.2D
b → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; integer sum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, 2*esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); if sub_op then sum = element1 - element2; else sum = element1 + element2; Elem[result, e, 2*esize] = sum<2*esize-1:0>; V[d] = result;
A64
Signed Halving Subtract. This instruction subtracts the elements in the vector in the second source SIMD&FP register from the corresponding elements in the vector in the first source SIMD&FP register, shifts each result right one bit, places each result into elements of a vector, and writes the vector to the destination SIMD&FP register.
SHSUB Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; Elem[result, e, esize] = diff<esize:1>; V[d] = result;
v7/A32/A64
Signed Halving Subtract. This instruction subtracts the elements in the vector in the second source SIMD&FP register from the corresponding elements in the vector in the first source SIMD&FP register, shifts each result right one bit, places each result into elements of a vector, and writes the vector to the destination SIMD&FP register.
SHSUB Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; Elem[result, e, esize] = diff<esize:1>; V[d] = result;
v7/A32/A64
Signed Halving Subtract. This instruction subtracts the elements in the vector in the second source SIMD&FP register from the corresponding elements in the vector in the first source SIMD&FP register, shifts each result right one bit, places each result into elements of a vector, and writes the vector to the destination SIMD&FP register.
SHSUB Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; Elem[result, e, esize] = diff<esize:1>; V[d] = result;
v7/A32/A64
Signed Halving Subtract. This instruction subtracts the elements in the vector in the second source SIMD&FP register from the corresponding elements in the vector in the first source SIMD&FP register, shifts each result right one bit, places each result into elements of a vector, and writes the vector to the destination SIMD&FP register.
SHSUB Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; Elem[result, e, esize] = diff<esize:1>; V[d] = result;
v7/A32/A64
Signed Halving Subtract. This instruction subtracts the elements in the vector in the second source SIMD&FP register from the corresponding elements in the vector in the first source SIMD&FP register, shifts each result right one bit, places each result into elements of a vector, and writes the vector to the destination SIMD&FP register.
SHSUB Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; Elem[result, e, esize] = diff<esize:1>; V[d] = result;
v7/A32/A64
Signed Halving Subtract. This instruction subtracts the elements in the vector in the second source SIMD&FP register from the corresponding elements in the vector in the first source SIMD&FP register, shifts each result right one bit, places each result into elements of a vector, and writes the vector to the destination SIMD&FP register.
SHSUB Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; Elem[result, e, esize] = diff<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Halving Subtract. This instruction subtracts the vector elements in the second source SIMD&FP register from the corresponding vector elements in the first source SIMD&FP register, shifts each result right one bit, places each result into a vector, and writes the vector to the destination SIMD&FP register.
UHSUB Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; Elem[result, e, esize] = diff<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Halving Subtract. This instruction subtracts the vector elements in the second source SIMD&FP register from the corresponding vector elements in the first source SIMD&FP register, shifts each result right one bit, places each result into a vector, and writes the vector to the destination SIMD&FP register.
UHSUB Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; Elem[result, e, esize] = diff<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Halving Subtract. This instruction subtracts the vector elements in the second source SIMD&FP register from the corresponding vector elements in the first source SIMD&FP register, shifts each result right one bit, places each result into a vector, and writes the vector to the destination SIMD&FP register.
UHSUB Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; Elem[result, e, esize] = diff<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Halving Subtract. This instruction subtracts the vector elements in the second source SIMD&FP register from the corresponding vector elements in the first source SIMD&FP register, shifts each result right one bit, places each result into a vector, and writes the vector to the destination SIMD&FP register.
UHSUB Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; Elem[result, e, esize] = diff<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Halving Subtract. This instruction subtracts the vector elements in the second source SIMD&FP register from the corresponding vector elements in the first source SIMD&FP register, shifts each result right one bit, places each result into a vector, and writes the vector to the destination SIMD&FP register.
UHSUB Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; Elem[result, e, esize] = diff<esize:1>; V[d] = result;
v7/A32/A64
Unsigned Halving Subtract. This instruction subtracts the vector elements in the second source SIMD&FP register from the corresponding vector elements in the first source SIMD&FP register, shifts each result right one bit, places each result into a vector, and writes the vector to the destination SIMD&FP register.
UHSUB Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; Elem[result, e, esize] = diff<esize:1>; V[d] = result;
v7/A32/A64
Signed saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQSUB Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQSUB Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQSUB Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQSUB Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQSUB Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQSUB Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQSUB Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQSUB Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Unsigned saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQSUB Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Unsigned saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQSUB Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Unsigned saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQSUB Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Unsigned saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQSUB Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Unsigned saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQSUB Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Unsigned saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQSUB Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Unsigned saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQSUB Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Unsigned saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQSUB Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQSUB Bd,Bn,Bm
a → Bn
b → Bm
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQSUB Hd,Hn,Hm
a → Hn
b → Hm
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQSUB Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQSUB Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQSUB Bd,Bn,Bm
a → Bn
b → Bm
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQSUB Hd,Hn,Hm
a → Hn
b → Hm
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQSUB Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Unsigned saturating Subtract. This instruction subtracts the element values of the second source SIMD&FP register from the corresponding element values of the first source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQSUB Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer diff; boolean sat; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); diff = element1 - element2; (Elem[result, e, esize], sat) = SatQ(diff, esize, unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Subtract returning High Narrow. This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values.
SUBHN Vd.8B,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Subtract returning High Narrow. This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values.
SUBHN Vd.4H,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Subtract returning High Narrow. This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values.
SUBHN Vd.2S,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Subtract returning High Narrow. This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values.
SUBHN Vd.8B,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Subtract returning High Narrow. This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values.
SUBHN Vd.4H,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Subtract returning High Narrow. This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values.
SUBHN Vd.2S,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Subtract returning High Narrow. This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values.
SUBHN2 Vd.16B,Vn.8H,Vm.8H
r → Vd.8B
a → Vn.8H
b → Vm.8H
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Subtract returning High Narrow. This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values.
SUBHN2 Vd.8H,Vn.4S,Vm.4S
r → Vd.4H
a → Vn.4S
b → Vm.4S
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Subtract returning High Narrow. This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values.
SUBHN2 Vd.4S,Vn.2D,Vm.2D
r → Vd.2S
a → Vn.2D
b → Vm.2D
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Subtract returning High Narrow. This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values.
SUBHN2 Vd.16B,Vn.8H,Vm.8H
r → Vd.8B
a → Vn.8H
b → Vm.8H
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Subtract returning High Narrow. This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values.
SUBHN2 Vd.8H,Vn.4S,Vm.4S
r → Vd.4H
a → Vn.4S
b → Vm.4S
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Subtract returning High Narrow. This instruction subtracts each vector element in the second source SIMD&FP register from the corresponding vector element in the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values.
SUBHN2 Vd.4S,Vn.2D,Vm.2D
r → Vd.2S
a → Vn.2D
b → Vm.2D
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Rounding Subtract returning High Narrow. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RSUBHN Vd.8B,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Rounding Subtract returning High Narrow. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RSUBHN Vd.4H,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Rounding Subtract returning High Narrow. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RSUBHN Vd.2S,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Rounding Subtract returning High Narrow. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RSUBHN Vd.8B,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Rounding Subtract returning High Narrow. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RSUBHN Vd.4H,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Rounding Subtract returning High Narrow. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RSUBHN Vd.2S,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
v7/A32/A64
Rounding Subtract returning High Narrow. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RSUBHN2 Vd.16B,Vn.8H,Vm.8H
r → Vd.8B
a → Vn.8H
b → Vm.8H
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Rounding Subtract returning High Narrow. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RSUBHN2 Vd.8H,Vn.4S,Vm.4S
r → Vd.4H
a → Vn.4S
b → Vm.4S
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Rounding Subtract returning High Narrow. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RSUBHN2 Vd.4S,Vn.2D,Vm.2D
r → Vd.2S
a → Vn.2D
b → Vm.2D
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Rounding Subtract returning High Narrow. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RSUBHN2 Vd.16B,Vn.8H,Vm.8H
r → Vd.8B
a → Vn.8H
b → Vm.8H
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Rounding Subtract returning High Narrow. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RSUBHN2 Vd.8H,Vn.4S,Vm.4S
r → Vd.4H
a → Vn.4S
b → Vm.4S
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Rounding Subtract returning High Narrow. This instruction subtracts each vector element of the second source SIMD&FP register from the corresponding vector element of the first source SIMD&FP register, places the most significant half of the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register.
RSUBHN2 Vd.4S,Vn.2D,Vm.2D
r → Vd.2S
a → Vn.2D
b → Vm.2D
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand1 = V[n]; bits(2*datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if round then 1 << (esize - 1) else 0; bits(2*esize) element1; bits(2*esize) element2; bits(2*esize) sum; for e = 0 to elements-1 element1 = Elem[operand1, e, 2*esize]; element2 = Elem[operand2, e, 2*esize]; if sub_op then sum = element1 - element2; else sum = element1 + element2; sum = sum + round_const; Elem[result, e, esize] = sum<2*esize-1:esize>; Vpart[d, part] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Compare Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMEQ Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Compare Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMEQ Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A32/A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A32/A64
Floating-point Compare Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMEQ Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMEQ Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMEQ Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMEQ Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.8B,Vn.8B,#0
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.16B,Vn.16B,#0
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.4H,Vn.4H,#0
a → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.8H,Vn.8H,#0
a → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.2S,Vn.2S,#0
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.4S,Vn.4S,#0
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.8B,Vn.8B,#0
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.16B,Vn.16B,#0
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.4H,Vn.4H,#0
a → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.8H,Vn.8H,#0
a → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.2S,Vn.2S,#0
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.4S,Vn.4S,#0
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMEQ Vd.2S,Vn.2S,#0
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMEQ Vd.4S,Vn.4S,#0
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.8B,Vn.8B,#0
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.16B,Vn.16B,#0
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.2D,Vn.2D,#0
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.2D,Vn.2D,#0
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A32/A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Vd.2D,Vn.2D,#0
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A32/A64
Floating-point Compare Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMEQ Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMEQ Vd.2D,Vn.2D,#0
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMEQ Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMEQ Sd,Sn,#0
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMEQ Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.8B,Vm.8B,Vn.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.16B,Vm.16B,Vn.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.4H,Vm.4H,Vn.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.8H,Vm.8H,Vn.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.2S,Vm.2S,Vn.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.4S,Vm.4S,Vn.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Vd.8B,Vm.8B,Vn.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Vd.16B,Vm.16B,Vn.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Vd.4H,Vm.4H,Vn.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Vd.8H,Vm.8H,Vn.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Vd.2S,Vm.2S,Vn.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Vd.4S,Vm.4S,Vn.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Vd.2S,Vm.2S,Vn.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Vd.4S,Vm.4S,Vn.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.2D,Vm.2D,Vn.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Vd.2D,Vm.2D,Vn.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Vd.2D,Vm.2D,Vn.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.8B,Vn.8B,#0
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.16B,Vn.16B,#0
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.4H,Vn.4H,#0
a → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.8H,Vn.8H,#0
a → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.2S,Vn.2S,#0
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.4S,Vn.4S,#0
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.2D,Vn.2D,#0
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Vd.2S,Vn.2S,#0
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Vd.4S,Vn.4S,#0
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Vd.2D,Vn.2D,#0
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Sd,Sn,#0
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.8B,Vm.8B,Vn.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.16B,Vm.16B,Vn.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.4H,Vm.4H,Vn.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.8H,Vm.8H,Vn.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.2S,Vm.2S,Vn.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.4S,Vm.4S,Vn.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Vd.8B,Vm.8B,Vn.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Vd.16B,Vm.16B,Vn.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Vd.4H,Vm.4H,Vn.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Vd.8H,Vm.8H,Vn.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Vd.2S,Vm.2S,Vn.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Vd.4S,Vm.4S,Vn.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Vd.2S,Vm.2S,Vn.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Vd.4S,Vm.4S,Vn.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Dd,Dm,Dn
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Vd.2D,Vm.2D,Vn.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Dd,Dm,Dn
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Vd.2D,Vm.2D,Vn.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Dd,Dm,Dn
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Vd.2D,Vm.2D,Vn.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGE Dd,Dm,Dn
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare unsigned Higher or Same (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than or equal to the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHS Dd,Dm,Dn
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Sd,Sm,Sn
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGE Dd,Dm,Dn
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLE Vd.8B,Vn.8B,#0
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLE Vd.16B,Vn.16B,#0
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLE Vd.4H,Vn.4H,#0
a → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLE Vd.8H,Vn.8H,#0
a → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLE Vd.2S,Vn.2S,#0
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLE Vd.4S,Vn.4S,#0
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLE Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLE Vd.2D,Vn.2D,#0
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLE Vd.2S,Vn.2S,#0
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Less than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is less than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMLE Vd.4S,Vn.4S,#0
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Less than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is less than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMLE Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Less than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is less than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMLE Vd.2D,Vn.2D,#0
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than or Equal to zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLE Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Less than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is less than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMLE Sd,Sn,#0
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Less than or Equal to zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is less than or equal to zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMLE Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.8B,Vn.8B,#0
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.16B,Vn.16B,#0
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.4H,Vn.4H,#0
a → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.8H,Vn.8H,#0
a → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.2S,Vn.2S,#0
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.4S,Vn.4S,#0
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.2D,Vn.2D,#0
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Vd.2S,Vn.2S,#0
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Vd.4S,Vn.4S,#0
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Vd.2D,Vn.2D,#0
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Sd,Sn,#0
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.8B,Vm.8B,Vn.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.16B,Vm.16B,Vn.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.4H,Vm.4H,Vn.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.8H,Vm.8H,Vn.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.2S,Vm.2S,Vn.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.4S,Vm.4S,Vn.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Vd.8B,Vm.8B,Vn.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Vd.16B,Vm.16B,Vn.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Vd.4H,Vm.4H,Vn.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Vd.8H,Vm.8H,Vn.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Vd.2S,Vm.2S,Vn.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Vd.4S,Vm.4S,Vn.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Vd.2S,Vm.2S,Vn.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Vd.4S,Vm.4S,Vn.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Dd,Dm,Dn
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Vd.2D,Vm.2D,Vn.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Dd,Dm,Dn
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Vd.2D,Vm.2D,Vn.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Dd,Dm,Dn
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Vd.2D,Vm.2D,Vn.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Greater than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMGT Dd,Dm,Dn
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare unsigned Higher (vector). This instruction compares each vector element in the first source SIMD&FP register with the corresponding vector element in the second source SIMD&FP register and if the first unsigned integer value is greater than the second unsigned integer value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMHI Dd,Dm,Dn
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; boolean test_passed; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); test_passed = if cmp_eq then element1 >= element2 else element1 > element2; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Sd,Sm,Sn
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Greater than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is greater than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMGT Dd,Dm,Dn
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLT Vd.8B,Vn.8B,#0
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLT Vd.16B,Vn.16B,#0
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLT Vd.4H,Vn.4H,#0
a → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLT Vd.8H,Vn.8H,#0
a → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLT Vd.2S,Vn.2S,#0
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLT Vd.4S,Vn.4S,#0
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLT Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLT Vd.2D,Vn.2D,#0
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Less than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is less than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMLT Vd.2S,Vn.2S,#0
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Less than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is less than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMLT Vd.4S,Vn.4S,#0
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Less than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is less than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMLT Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Less than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is less than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMLT Vd.2D,Vn.2D,#0
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare signed Less than zero (vector). This instruction reads each vector element in the source SIMD&FP register and if the signed integer value is less than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMLT Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean test_passed; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); case comparison of when CompareOp_GT test_passed = element > 0; when CompareOp_GE test_passed = element >= 0; when CompareOp_EQ test_passed = element == 0; when CompareOp_LE test_passed = element <= 0; when CompareOp_LT test_passed = element < 0; Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Less than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is less than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMLT Sd,Sn,#0
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Compare Less than zero (vector). This instruction reads each floating-point value in the source SIMD&FP register and if the value is less than zero sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FCMLT Dd,Dn,#0
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) zero = FPZero('0'); bits(esize) element; boolean test_passed; for e = 0 to elements-1 element = Elem[operand, e, esize]; case comparison of when CompareOp_GT test_passed = FPCompareGT(element, zero, FPCR); when CompareOp_GE test_passed = FPCompareGE(element, zero, FPCR); when CompareOp_EQ test_passed = FPCompareEQ(element, zero, FPCR); when CompareOp_LE test_passed = FPCompareGE(zero, element, FPCR); when CompareOp_LT test_passed = FPCompareGT(zero, element, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Absolute Compare Greater than or Equal (vector). This instruction compares the absolute value of each floating-point value in the first source SIMD&FP register with the absolute value of the corresponding floating-point value in the second source SIMD&FP register and if the first value is greater than or equal to the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGE Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Absolute Compare Greater than or Equal (vector). This instruction compares the absolute value of each floating-point value in the first source SIMD&FP register with the absolute value of the corresponding floating-point value in the second source SIMD&FP register and if the first value is greater than or equal to the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGE Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Absolute Compare Greater than or Equal (vector). This instruction compares the absolute value of each floating-point value in the first source SIMD&FP register with the absolute value of the corresponding floating-point value in the second source SIMD&FP register and if the first value is greater than or equal to the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGE Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Absolute Compare Greater than or Equal (vector). This instruction compares the absolute value of each floating-point value in the first source SIMD&FP register with the absolute value of the corresponding floating-point value in the second source SIMD&FP register and if the first value is greater than or equal to the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGE Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Absolute Compare Greater than or Equal (vector). This instruction compares the absolute value of each floating-point value in the first source SIMD&FP register with the absolute value of the corresponding floating-point value in the second source SIMD&FP register and if the first value is greater than or equal to the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGE Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Absolute Compare Greater than or Equal (vector). This instruction compares the absolute value of each floating-point value in the first source SIMD&FP register with the absolute value of the corresponding floating-point value in the second source SIMD&FP register and if the first value is greater than or equal to the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGE Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Absolute Compare Greater than or Equal (vector). This instruction compares the absolute value of each floating-point value in the first source SIMD&FP register with the absolute value of the corresponding floating-point value in the second source SIMD&FP register and if the first value is greater than or equal to the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGE Vd.2S,Vm.2S,Vn.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Absolute Compare Greater than or Equal (vector). This instruction compares the absolute value of each floating-point value in the first source SIMD&FP register with the absolute value of the corresponding floating-point value in the second source SIMD&FP register and if the first value is greater than or equal to the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGE Vd.4S,Vm.4S,Vn.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Absolute Compare Greater than or Equal (vector). This instruction compares the absolute value of each floating-point value in the first source SIMD&FP register with the absolute value of the corresponding floating-point value in the second source SIMD&FP register and if the first value is greater than or equal to the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGE Dd,Dm,Dn
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Absolute Compare Greater than or Equal (vector). This instruction compares the absolute value of each floating-point value in the first source SIMD&FP register with the absolute value of the corresponding floating-point value in the second source SIMD&FP register and if the first value is greater than or equal to the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGE Vd.2D,Vm.2D,Vn.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Absolute Compare Greater than or Equal (vector). This instruction compares the absolute value of each floating-point value in the first source SIMD&FP register with the absolute value of the corresponding floating-point value in the second source SIMD&FP register and if the first value is greater than or equal to the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGE Sd,Sm,Sn
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Absolute Compare Greater than or Equal (vector). This instruction compares the absolute value of each floating-point value in the first source SIMD&FP register with the absolute value of the corresponding floating-point value in the second source SIMD&FP register and if the first value is greater than or equal to the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGE Dd,Dm,Dn
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Absolute Compare Greater than (vector). This instruction compares the absolute value of each vector element in the first source SIMD&FP register with the absolute value of the corresponding vector element in the second source SIMD&FP register and if the first value is greater than the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGT Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Absolute Compare Greater than (vector). This instruction compares the absolute value of each vector element in the first source SIMD&FP register with the absolute value of the corresponding vector element in the second source SIMD&FP register and if the first value is greater than the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGT Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Absolute Compare Greater than (vector). This instruction compares the absolute value of each vector element in the first source SIMD&FP register with the absolute value of the corresponding vector element in the second source SIMD&FP register and if the first value is greater than the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGT Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Absolute Compare Greater than (vector). This instruction compares the absolute value of each vector element in the first source SIMD&FP register with the absolute value of the corresponding vector element in the second source SIMD&FP register and if the first value is greater than the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGT Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Absolute Compare Greater than (vector). This instruction compares the absolute value of each vector element in the first source SIMD&FP register with the absolute value of the corresponding vector element in the second source SIMD&FP register and if the first value is greater than the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGT Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Absolute Compare Greater than (vector). This instruction compares the absolute value of each vector element in the first source SIMD&FP register with the absolute value of the corresponding vector element in the second source SIMD&FP register and if the first value is greater than the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGT Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Absolute Compare Greater than (vector). This instruction compares the absolute value of each vector element in the first source SIMD&FP register with the absolute value of the corresponding vector element in the second source SIMD&FP register and if the first value is greater than the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGT Vd.2S,Vm.2S,Vn.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Absolute Compare Greater than (vector). This instruction compares the absolute value of each vector element in the first source SIMD&FP register with the absolute value of the corresponding vector element in the second source SIMD&FP register and if the first value is greater than the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGT Vd.4S,Vm.4S,Vn.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Floating-point Absolute Compare Greater than (vector). This instruction compares the absolute value of each vector element in the first source SIMD&FP register with the absolute value of the corresponding vector element in the second source SIMD&FP register and if the first value is greater than the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGT Dd,Dm,Dn
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Absolute Compare Greater than (vector). This instruction compares the absolute value of each vector element in the first source SIMD&FP register with the absolute value of the corresponding vector element in the second source SIMD&FP register and if the first value is greater than the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGT Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Absolute Compare Greater than (vector). This instruction compares the absolute value of each vector element in the first source SIMD&FP register with the absolute value of the corresponding vector element in the second source SIMD&FP register and if the first value is greater than the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGT Sd,Sm,Sn
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Floating-point Absolute Compare Greater than (vector). This instruction compares the absolute value of each vector element in the first source SIMD&FP register with the absolute value of the corresponding vector element in the second source SIMD&FP register and if the first value is greater than the second value sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
FACGT Dd,Dm,Dn
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if abs then element1 = FPAbs(element1); element2 = FPAbs(element2); case cmp of when CompareOp_EQ test_passed = FPCompareEQ(element1, element2, FPCR); when CompareOp_GE test_passed = FPCompareGE(element1, element2, FPCR); when CompareOp_GT test_passed = FPCompareGT(element1, element2, FPCR); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
v7/A32/A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A32/A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A32/A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Compare bitwise Test bits nonzero (vector). This instruction reads each vector element in the first source SIMD&FP register, performs an AND with the corresponding vector element in the second source SIMD&FP register, and if the result is not zero, sets every bit of the corresponding vector element in the destination SIMD&FP register to one, otherwise sets every bit of the corresponding vector element in the destination SIMD&FP register to zero.
CMTST Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; boolean test_passed; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if and_test then test_passed = !IsZero(element1 AND element2); else test_passed = (element1 == element2); Elem[result, e, esize] = if test_passed then Ones() else Zeros(); V[d] = result;
A64
Signed Absolute Difference. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, places the the absolute values of the results into a vector, and writes the vector to the destination SIMD&FP register.
SABD Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Signed Absolute Difference. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, places the the absolute values of the results into a vector, and writes the vector to the destination SIMD&FP register.
SABD Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Signed Absolute Difference. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, places the the absolute values of the results into a vector, and writes the vector to the destination SIMD&FP register.
SABD Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Signed Absolute Difference. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, places the the absolute values of the results into a vector, and writes the vector to the destination SIMD&FP register.
SABD Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Signed Absolute Difference. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, places the the absolute values of the results into a vector, and writes the vector to the destination SIMD&FP register.
SABD Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Signed Absolute Difference. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, places the the absolute values of the results into a vector, and writes the vector to the destination SIMD&FP register.
SABD Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute Difference (vector). This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, places the the absolute values of the results into a vector, and writes the vector to the destination SIMD&FP register.
UABD Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute Difference (vector). This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, places the the absolute values of the results into a vector, and writes the vector to the destination SIMD&FP register.
UABD Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute Difference (vector). This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, places the the absolute values of the results into a vector, and writes the vector to the destination SIMD&FP register.
UABD Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute Difference (vector). This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, places the the absolute values of the results into a vector, and writes the vector to the destination SIMD&FP register.
UABD Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute Difference (vector). This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, places the the absolute values of the results into a vector, and writes the vector to the destination SIMD&FP register.
UABD Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute Difference (vector). This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, places the the absolute values of the results into a vector, and writes the vector to the destination SIMD&FP register.
UABD Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Floating-point Absolute Difference (vector). This instruction subtracts the floating-point values in the elements of the second source SIMD&FP register, from the corresponding floating-point values in the elements of the first source SIMD&FP register, places the absolute value of each result in a vector, and writes the vector to the destination SIMD&FP register.
FABD Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) diff; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; diff = FPSub(element1, element2, FPCR); Elem[result, e, esize] = if abs then FPAbs(diff) else diff; V[d] = result;
v7/A32/A64
Floating-point Absolute Difference (vector). This instruction subtracts the floating-point values in the elements of the second source SIMD&FP register, from the corresponding floating-point values in the elements of the first source SIMD&FP register, places the absolute value of each result in a vector, and writes the vector to the destination SIMD&FP register.
FABD Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) diff; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; diff = FPSub(element1, element2, FPCR); Elem[result, e, esize] = if abs then FPAbs(diff) else diff; V[d] = result;
v7/A32/A64
Floating-point Absolute Difference (vector). This instruction subtracts the floating-point values in the elements of the second source SIMD&FP register, from the corresponding floating-point values in the elements of the first source SIMD&FP register, places the absolute value of each result in a vector, and writes the vector to the destination SIMD&FP register.
FABD Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) diff; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; diff = FPSub(element1, element2, FPCR); Elem[result, e, esize] = if abs then FPAbs(diff) else diff; V[d] = result;
A64
Floating-point Absolute Difference (vector). This instruction subtracts the floating-point values in the elements of the second source SIMD&FP register, from the corresponding floating-point values in the elements of the first source SIMD&FP register, places the absolute value of each result in a vector, and writes the vector to the destination SIMD&FP register.
FABD Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) diff; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; diff = FPSub(element1, element2, FPCR); Elem[result, e, esize] = if abs then FPAbs(diff) else diff; V[d] = result;
A64
Floating-point Absolute Difference (vector). This instruction subtracts the floating-point values in the elements of the second source SIMD&FP register, from the corresponding floating-point values in the elements of the first source SIMD&FP register, places the absolute value of each result in a vector, and writes the vector to the destination SIMD&FP register.
FABD Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) diff; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; diff = FPSub(element1, element2, FPCR); Elem[result, e, esize] = if abs then FPAbs(diff) else diff; V[d] = result;
A64
Floating-point Absolute Difference (vector). This instruction subtracts the floating-point values in the elements of the second source SIMD&FP register, from the corresponding floating-point values in the elements of the first source SIMD&FP register, places the absolute value of each result in a vector, and writes the vector to the destination SIMD&FP register.
FABD Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) diff; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; diff = FPSub(element1, element2, FPCR); Elem[result, e, esize] = if abs then FPAbs(diff) else diff; V[d] = result;
A64
Signed Absolute Difference Long. This instruction subtracts the vector elements of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, places the absolute value of the results into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SABDL Vd.8H,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
v7/A32/A64
Signed Absolute Difference Long. This instruction subtracts the vector elements of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, places the absolute value of the results into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SABDL Vd.4S,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
v7/A32/A64
Signed Absolute Difference Long. This instruction subtracts the vector elements of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, places the absolute value of the results into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SABDL Vd.2D,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute Difference Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, places the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UABDL Vd.8H,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute Difference Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, places the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UABDL Vd.4S,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute Difference Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, places the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UABDL Vd.2D,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
v7/A32/A64
Signed Absolute Difference Long. This instruction subtracts the vector elements of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, places the absolute value of the results into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SABDL2 Vd.8H,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
A64
Signed Absolute Difference Long. This instruction subtracts the vector elements of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, places the absolute value of the results into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SABDL2 Vd.4S,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
A64
Signed Absolute Difference Long. This instruction subtracts the vector elements of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, places the absolute value of the results into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SABDL2 Vd.2D,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
A64
Unsigned Absolute Difference Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, places the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UABDL2 Vd.8H,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
A64
Unsigned Absolute Difference Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, places the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UABDL2 Vd.4S,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
A64
Unsigned Absolute Difference Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, places the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UABDL2 Vd.2D,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
A64
Signed Absolute difference and Accumulate. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the elements of the vector of the destination SIMD&FP register.
SABA Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Signed Absolute difference and Accumulate. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the elements of the vector of the destination SIMD&FP register.
SABA Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Signed Absolute difference and Accumulate. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the elements of the vector of the destination SIMD&FP register.
SABA Vd.4H,Vn.4H,Vm.4H
a → Vd.4H
b → Vn.4H
c → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Signed Absolute difference and Accumulate. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the elements of the vector of the destination SIMD&FP register.
SABA Vd.8H,Vn.8H,Vm.8H
a → Vd.8H
b → Vn.8H
c → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Signed Absolute difference and Accumulate. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the elements of the vector of the destination SIMD&FP register.
SABA Vd.2S,Vn.2S,Vm.2S
a → Vd.2S
b → Vn.2S
c → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Signed Absolute difference and Accumulate. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the elements of the vector of the destination SIMD&FP register.
SABA Vd.4S,Vn.4S,Vm.4S
a → Vd.4S
b → Vn.4S
c → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute difference and Accumulate. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the elements of the vector of the destination SIMD&FP register.
UABA Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute difference and Accumulate. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the elements of the vector of the destination SIMD&FP register.
UABA Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute difference and Accumulate. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the elements of the vector of the destination SIMD&FP register.
UABA Vd.4H,Vn.4H,Vm.4H
a → Vd.4H
b → Vn.4H
c → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute difference and Accumulate. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the elements of the vector of the destination SIMD&FP register.
UABA Vd.8H,Vn.8H,Vm.8H
a → Vd.8H
b → Vn.8H
c → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute difference and Accumulate. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the elements of the vector of the destination SIMD&FP register.
UABA Vd.2S,Vn.2S,Vm.2S
a → Vd.2S
b → Vn.2S
c → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute difference and Accumulate. This instruction subtracts the elements of the vector of the second source SIMD&FP register from the corresponding elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the elements of the vector of the destination SIMD&FP register.
UABA Vd.4S,Vn.4S,Vm.4S
a → Vd.4S
b → Vn.4S
c → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; bits(esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<esize-1:0>; Elem[result, e, esize] = Elem[result, e, esize] + absdiff; V[d] = result;
v7/A32/A64
Signed Absolute difference and Accumulate Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SABAL Vd.8H,Vn.8B,Vm.8B
a → Vd.8H
b → Vn.8B
c → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
v7/A32/A64
Signed Absolute difference and Accumulate Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SABAL Vd.4S,Vn.4H,Vm.4H
a → Vd.4S
b → Vn.4H
c → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
v7/A32/A64
Signed Absolute difference and Accumulate Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SABAL Vd.2D,Vn.2S,Vm.2S
a → Vd.2D
b → Vn.2S
c → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute difference and Accumulate Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UABAL Vd.8H,Vn.8B,Vm.8B
a → Vd.8H
b → Vn.8B
c → Vm.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute difference and Accumulate Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UABAL Vd.4S,Vn.4H,Vm.4H
a → Vd.4S
b → Vn.4H
c → Vm.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
v7/A32/A64
Unsigned Absolute difference and Accumulate Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UABAL Vd.2D,Vn.2S,Vm.2S
a → Vd.2D
b → Vn.2S
c → Vm.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
v7/A32/A64
Signed Absolute difference and Accumulate Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SABAL2 Vd.8H,Vn.16B,Vm.16B
a → Vd.8H
b → Vn.16B
c → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
A64
Signed Absolute difference and Accumulate Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SABAL2 Vd.4S,Vn.8H,Vm.8H
a → Vd.4S
b → Vn.8H
c → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
A64
Signed Absolute difference and Accumulate Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SABAL2 Vd.2D,Vn.4S,Vm.4S
a → Vd.2D
b → Vn.4S
c → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
A64
Unsigned Absolute difference and Accumulate Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UABAL2 Vd.8H,Vn.16B,Vm.16B
a → Vd.8H
b → Vn.16B
c → Vm.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
A64
Unsigned Absolute difference and Accumulate Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UABAL2 Vd.4S,Vn.8H,Vm.8H
a → Vd.4S
b → Vn.8H
c → Vm.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
A64
Unsigned Absolute difference and Accumulate Long. This instruction subtracts the vector elements in the lower or upper half of the second source SIMD&FP register from the corresponding vector elements of the first source SIMD&FP register, and accumulates the absolute values of the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UABAL2 Vd.2D,Vn.4S,Vm.4S
a → Vd.2D
b → Vn.4S
c → Vm.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) absdiff; result = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); absdiff = Abs(element1-element2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + absdiff; V[d] = result;
A64
Signed Maximum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the larger of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMAX Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Maximum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the larger of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMAX Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Maximum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the larger of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMAX Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Maximum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the larger of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMAX Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Maximum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the larger of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMAX Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Maximum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the larger of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMAX Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Maximum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the larger of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMAX Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Maximum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the larger of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMAX Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Maximum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the larger of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMAX Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Maximum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the larger of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMAX Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Maximum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the larger of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMAX Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Maximum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the larger of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMAX Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Floating-point Maximum (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, places the larger of each of the two floating-point values into a vector, and writes the vector to the destination SIMD&FP register.
FMAX Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
v7/A32/A64
Floating-point Maximum (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, places the larger of each of the two floating-point values into a vector, and writes the vector to the destination SIMD&FP register.
FMAX Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
v7/A32/A64
Floating-point Maximum (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, places the larger of each of the two floating-point values into a vector, and writes the vector to the destination SIMD&FP register.
FMAX Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
A64
Floating-point Maximum (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, places the larger of each of the two floating-point values into a vector, and writes the vector to the destination SIMD&FP register.
FMAX Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
A64
Signed Minimum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the smaller of each of the two signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMIN Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Minimum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the smaller of each of the two signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMIN Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Minimum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the smaller of each of the two signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMIN Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Minimum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the smaller of each of the two signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMIN Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Minimum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the smaller of each of the two signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMIN Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Minimum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the smaller of each of the two signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMIN Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Minimum (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, places the smaller of each of the two unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMIN Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Minimum (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, places the smaller of each of the two unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMIN Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Minimum (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, places the smaller of each of the two unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMIN Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Minimum (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, places the smaller of each of the two unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMIN Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Minimum (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, places the smaller of each of the two unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMIN Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Minimum (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, places the smaller of each of the two unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMIN Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Floating-point minimum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the smaller of each of the two floating-point values into a vector, and writes the vector to the destination SIMD&FP register.
FMIN Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
v7/A32/A64
Floating-point minimum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the smaller of each of the two floating-point values into a vector, and writes the vector to the destination SIMD&FP register.
FMIN Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
v7/A32/A64
Floating-point minimum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the smaller of each of the two floating-point values into a vector, and writes the vector to the destination SIMD&FP register.
FMIN Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
A64
Floating-point minimum (vector). This instruction compares corresponding elements in the vectors in the two source SIMD&FP registers, places the smaller of each of the two floating-point values into a vector, and writes the vector to the destination SIMD&FP register.
FMIN Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
A64
Floating-point Maximum Number (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, writes the larger of the two floating-point values into a vector, and writes the vector to the destination SIMD&FP register.
FMAXNM Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A32/A64
Floating-point Maximum Number (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, writes the larger of the two floating-point values into a vector, and writes the vector to the destination SIMD&FP register.
FMAXNM Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A32/A64
Floating-point Maximum Number (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, writes the larger of the two floating-point values into a vector, and writes the vector to the destination SIMD&FP register.
FMAXNM Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Floating-point Maximum Number (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, writes the larger of the two floating-point values into a vector, and writes the vector to the destination SIMD&FP register.
FMAXNM Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Floating-point Minimum Number (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, writes the smaller of the two floating-point values into a vector, and writes the vector to the destination SIMD&FP register.
FMINNM Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A32/A64
Floating-point Minimum Number (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, writes the smaller of the two floating-point values into a vector, and writes the vector to the destination SIMD&FP register.
FMINNM Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A32/A64
Floating-point Minimum Number (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, writes the smaller of the two floating-point values into a vector, and writes the vector to the destination SIMD&FP register.
FMINNM Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Floating-point Minimum Number (vector). This instruction compares corresponding vector elements in the two source SIMD&FP registers, writes the smaller of the two floating-point values into a vector, and writes the vector to the destination SIMD&FP register.
FMINNM Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Signed Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts each value by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SSHL Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts each value by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SSHL Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts each value by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SSHL Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts each value by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SSHL Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts each value by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SSHL Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts each value by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SSHL Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts each value by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SSHL Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts each value by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SSHL Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
USHL Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
USHL Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
USHL Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
USHL Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
USHL Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
USHL Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
USHL Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
USHL Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts each value by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SSHL Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Unsigned Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
USHL Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Bd,Bn,Bm
a → Bn
b → Bm
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Hd,Hn,Hm
a → Hn
b → Hm
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Bd,Bn,Bm
a → Bn
b → Bm
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Hd,Hn,Hm
a → Hn
b → Hm
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Signed Rounding Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SRSHL Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SRSHL Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SRSHL Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SRSHL Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SRSHL Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SRSHL Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SRSHL Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SRSHL Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
URSHL Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
URSHL Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
URSHL Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
URSHL Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
URSHL Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
URSHL Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
URSHL Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
URSHL Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Left (register). This instruction takes each signed integer value in the vector of the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SRSHL Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Unsigned Rounding Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
URSHL Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Signed saturating Rounding Shift Left (register). This instruction takes each vector element in the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQRSHL Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Rounding Shift Left (register). This instruction takes each vector element in the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQRSHL Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Rounding Shift Left (register). This instruction takes each vector element in the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQRSHL Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Rounding Shift Left (register). This instruction takes each vector element in the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQRSHL Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Rounding Shift Left (register). This instruction takes each vector element in the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQRSHL Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Rounding Shift Left (register). This instruction takes each vector element in the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQRSHL Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Rounding Shift Left (register). This instruction takes each vector element in the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQRSHL Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Rounding Shift Left (register). This instruction takes each vector element in the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQRSHL Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Rounding Shift Left (register). This instruction takes each vector element of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQRSHL Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Rounding Shift Left (register). This instruction takes each vector element of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQRSHL Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Rounding Shift Left (register). This instruction takes each vector element of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQRSHL Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Rounding Shift Left (register). This instruction takes each vector element of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQRSHL Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Rounding Shift Left (register). This instruction takes each vector element of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQRSHL Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Rounding Shift Left (register). This instruction takes each vector element of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQRSHL Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Rounding Shift Left (register). This instruction takes each vector element of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQRSHL Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Rounding Shift Left (register). This instruction takes each vector element of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQRSHL Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Rounding Shift Left (register). This instruction takes each vector element in the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQRSHL Bd,Bn,Bm
a → Bn
b → Bm
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Signed saturating Rounding Shift Left (register). This instruction takes each vector element in the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQRSHL Hd,Hn,Hm
a → Hn
b → Hm
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Signed saturating Rounding Shift Left (register). This instruction takes each vector element in the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQRSHL Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Signed saturating Rounding Shift Left (register). This instruction takes each vector element in the first source SIMD&FP register, shifts it by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
SQRSHL Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Unsigned saturating Rounding Shift Left (register). This instruction takes each vector element of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQRSHL Bd,Bn,Bm
a → Bn
b → Bm
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Unsigned saturating Rounding Shift Left (register). This instruction takes each vector element of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQRSHL Hd,Hn,Hm
a → Hn
b → Hm
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Unsigned saturating Rounding Shift Left (register). This instruction takes each vector element of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQRSHL Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Unsigned saturating Rounding Shift Left (register). This instruction takes each vector element of the first source SIMD&FP register, shifts the vector element by a value from the least significant byte of the corresponding vector element of the second source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
UQRSHL Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Signed Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSHR.
SSHR Vd.8B,Vn.8B,#n
a → Vn.8B
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSHR.
SSHR Vd.16B,Vn.16B,#n
a → Vn.16B
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSHR.
SSHR Vd.4H,Vn.4H,#n
a → Vn.4H
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSHR.
SSHR Vd.8H,Vn.8H,#n
a → Vn.8H
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSHR.
SSHR Vd.2S,Vn.2S,#n
a → Vn.2S
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSHR.
SSHR Vd.4S,Vn.4S,#n
a → Vn.4S
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSHR.
SSHR Dd,Dn,#n
a → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSHR.
SSHR Vd.2D,Vn.2D,#n
a → Vn.2D
1 << n << 64
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSHR.
USHR Vd.8B,Vn.8B,#n
a → Vn.8B
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSHR.
USHR Vd.16B,Vn.16B,#n
a → Vn.16B
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSHR.
USHR Vd.4H,Vn.4H,#n
a → Vn.4H
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSHR.
USHR Vd.8H,Vn.8H,#n
a → Vn.8H
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSHR.
USHR Vd.2S,Vn.2S,#n
a → Vn.2S
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSHR.
USHR Vd.4S,Vn.4S,#n
a → Vn.4S
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSHR.
USHR Dd,Dn,#n
a → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSHR.
USHR Vd.2D,Vn.2D,#n
a → Vn.2D
1 << n << 64
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSHR.
SSHR Dd,Dn,#n
a → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
A64
Unsigned Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSHR.
USHR Dd,Dn,#n
a → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Vd.8B,Vn.8B,#n
a → Vn.8B
0 << n << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
v7/A32/A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Vd.16B,Vn.16B,#n
a → Vn.16B
0 << n << 7
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
v7/A32/A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Vd.4H,Vn.4H,#n
a → Vn.4H
0 << n << 15
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
v7/A32/A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Vd.8H,Vn.8H,#n
a → Vn.8H
0 << n << 15
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
v7/A32/A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Vd.2S,Vn.2S,#n
a → Vn.2S
0 << n << 31
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
v7/A32/A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Vd.4S,Vn.4S,#n
a → Vn.4S
0 << n << 31
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
v7/A32/A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Dd,Dn,#n
a → Dn
0 << n << 63
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
v7/A32/A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Vd.2D,Vn.2D,#n
a → Vn.2D
0 << n << 63
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
v7/A32/A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Vd.8B,Vn.8B,#n
a → Vn.8B
0 << n << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
v7/A32/A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Vd.16B,Vn.16B,#n
a → Vn.16B
0 << n << 7
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
v7/A32/A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Vd.4H,Vn.4H,#n
a → Vn.4H
0 << n << 15
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
v7/A32/A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Vd.8H,Vn.8H,#n
a → Vn.8H
0 << n << 15
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
v7/A32/A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Vd.2S,Vn.2S,#n
a → Vn.2S
0 << n << 31
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
v7/A32/A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Vd.4S,Vn.4S,#n
a → Vn.4S
0 << n << 31
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
v7/A32/A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Dd,Dn,#n
a → Dn
0 << n << 63
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
v7/A32/A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Vd.2D,Vn.2D,#n
a → Vn.2D
0 << n << 63
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
v7/A32/A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Dd,Dn,#n
a → Dn
0 << n << 63
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
A64
Shift Left (immediate). This instruction reads each value from a vector, left shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register.
SHL Dd,Dn,#n
a → Dn
0 << n << 63
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = LSL(Elem[operand, e, esize], shift); V[d] = result;
A64
Signed Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSHR.
SRSHR Vd.8B,Vn.8B,#n
a → Vn.8B
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSHR.
SRSHR Vd.16B,Vn.16B,#n
a → Vn.16B
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSHR.
SRSHR Vd.4H,Vn.4H,#n
a → Vn.4H
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSHR.
SRSHR Vd.8H,Vn.8H,#n
a → Vn.8H
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSHR.
SRSHR Vd.2S,Vn.2S,#n
a → Vn.2S
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSHR.
SRSHR Vd.4S,Vn.4S,#n
a → Vn.4S
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSHR.
SRSHR Dd,Dn,#n
a → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSHR.
SRSHR Vd.2D,Vn.2D,#n
a → Vn.2D
1 << n << 64
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USHR.
URSHR Vd.8B,Vn.8B,#n
a → Vn.8B
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USHR.
URSHR Vd.16B,Vn.16B,#n
a → Vn.16B
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USHR.
URSHR Vd.4H,Vn.4H,#n
a → Vn.4H
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USHR.
URSHR Vd.8H,Vn.8H,#n
a → Vn.8H
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USHR.
URSHR Vd.2S,Vn.2S,#n
a → Vn.2S
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USHR.
URSHR Vd.4S,Vn.4S,#n
a → Vn.4S
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USHR.
URSHR Dd,Dn,#n
a → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USHR.
URSHR Vd.2D,Vn.2D,#n
a → Vn.2D
1 << n << 64
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, places the final result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSHR.
SRSHR Dd,Dn,#n
a → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
A64
Unsigned Rounding Shift Right (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USHR.
URSHR Dd,Dn,#n
a → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
A64
Signed Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSRA.
SSRA Vd.8B,Vn.8B,#n
a → Vd.8B
b → Vn.8B
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSRA.
SSRA Vd.16B,Vn.16B,#n
a → Vd.16B
b → Vn.16B
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSRA.
SSRA Vd.4H,Vn.4H,#n
a → Vd.4H
b → Vn.4H
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSRA.
SSRA Vd.8H,Vn.8H,#n
a → Vd.8H
b → Vn.8H
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSRA.
SSRA Vd.2S,Vn.2S,#n
a → Vd.2S
b → Vn.2S
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSRA.
SSRA Vd.4S,Vn.4S,#n
a → Vd.4S
b → Vn.4S
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSRA.
SSRA Dd,Dn,#n
a → Dd
b → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSRA.
SSRA Vd.2D,Vn.2D,#n
a → Vd.2D
b → Vn.2D
1 << n << 64
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSRA.
USRA Vd.8B,Vn.8B,#n
a → Vd.8B
b → Vn.8B
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSRA.
USRA Vd.16B,Vn.16B,#n
a → Vd.16B
b → Vn.16B
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSRA.
USRA Vd.4H,Vn.4H,#n
a → Vd.4H
b → Vn.4H
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSRA.
USRA Vd.8H,Vn.8H,#n
a → Vd.8H
b → Vn.8H
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSRA.
USRA Vd.2S,Vn.2S,#n
a → Vd.2S
b → Vn.2S
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSRA.
USRA Vd.4S,Vn.4S,#n
a → Vd.4S
b → Vn.4S
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSRA.
USRA Dd,Dn,#n
a → Dd
b → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSRA.
USRA Vd.2D,Vn.2D,#n
a → Vd.2D
b → Vn.2D
1 << n << 64
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are truncated. For rounded results, see SRSRA.
SSRA Dd,Dn,#n
a → Dd
b → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
A64
Unsigned Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see URSRA.
USRA Dd,Dn,#n
a → Dd
b → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
A64
Signed Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSRA.
SRSRA Vd.8B,Vn.8B,#n
a → Vd.8B
b → Vn.8B
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSRA.
SRSRA Vd.16B,Vn.16B,#n
a → Vd.16B
b → Vn.16B
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSRA.
SRSRA Vd.4H,Vn.4H,#n
a → Vd.4H
b → Vn.4H
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSRA.
SRSRA Vd.8H,Vn.8H,#n
a → Vd.8H
b → Vn.8H
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSRA.
SRSRA Vd.2S,Vn.2S,#n
a → Vd.2S
b → Vn.2S
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSRA.
SRSRA Vd.4S,Vn.4S,#n
a → Vd.4S
b → Vn.4S
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSRA.
SRSRA Dd,Dn,#n
a → Dd
b → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSRA.
SRSRA Vd.2D,Vn.2D,#n
a → Vd.2D
b → Vn.2D
1 << n << 64
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USRA.
URSRA Vd.8B,Vn.8B,#n
a → Vd.8B
b → Vn.8B
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USRA.
URSRA Vd.16B,Vn.16B,#n
a → Vd.16B
b → Vn.16B
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USRA.
URSRA Vd.4H,Vn.4H,#n
a → Vd.4H
b → Vn.4H
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USRA.
URSRA Vd.8H,Vn.8H,#n
a → Vd.8H
b → Vn.8H
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USRA.
URSRA Vd.2S,Vn.2S,#n
a → Vd.2S
b → Vn.2S
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USRA.
URSRA Vd.4S,Vn.4S,#n
a → Vd.4S
b → Vn.4S
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USRA.
URSRA Dd,Dn,#n
a → Dd
b → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USRA.
URSRA Vd.2D,Vn.2D,#n
a → Vd.2D
b → Vn.2D
1 << n << 64
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are signed integer values. The results are rounded. For truncated results, see SSRA.
SRSRA Dd,Dn,#n
a → Dd
b → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
A64
Unsigned Rounding Shift Right and Accumulate (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, and accumulates the final results with the vector elements of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see USRA.
URSRA Dd,Dn,#n
a → Dd
b → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; operand2 = if accumulate then V[d] else Zeros(); for e = 0 to elements-1 element = (Int(Elem[operand, e, esize], unsigned) + round_const) >> shift; Elem[result, e, esize] = Elem[operand2, e, esize] + element<esize-1:0>; V[d] = result;
A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Vd.8B,Vn.8B,#n
a → Vn.8B
0 << n << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Vd.16B,Vn.16B,#n
a → Vn.16B
0 << n << 7
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Vd.4H,Vn.4H,#n
a → Vn.4H
0 << n << 15
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Vd.8H,Vn.8H,#n
a → Vn.8H
0 << n << 15
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Vd.2S,Vn.2S,#n
a → Vn.2S
0 << n << 31
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Vd.4S,Vn.4S,#n
a → Vn.4S
0 << n << 31
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Dd,Dn,#n
a → Dn
0 << n << 63
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Vd.2D,Vn.2D,#n
a → Vn.2D
0 << n << 63
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Vd.8B,Vn.8B,#n
a → Vn.8B
0 << n << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Vd.16B,Vn.16B,#n
a → Vn.16B
0 << n << 7
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Vd.4H,Vn.4H,#n
a → Vn.4H
0 << n << 15
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Vd.8H,Vn.8H,#n
a → Vn.8H
0 << n << 15
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Vd.2S,Vn.2S,#n
a → Vn.2S
0 << n << 31
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Vd.4S,Vn.4S,#n
a → Vn.4S
0 << n << 31
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Dd,Dn,#n
a → Dn
0 << n << 63
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Vd.2D,Vn.2D,#n
a → Vn.2D
0 << n << 63
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Bd,Bn,#n
a → Bn
0 << n << 7
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Hd,Hn,#n
a → Hn
0 << n << 15
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Sd,Sn,#n
a → Sn
0 << n << 31
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Signed saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts each element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SQSHL Dd,Dn,#n
a → Dn
0 << n << 63
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Bd,Bn,#n
a → Bn
0 << n << 7
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Hd,Hn,#n
a → Hn
0 << n << 15
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Sd,Sn,#n
a → Sn
0 << n << 31
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Unsigned saturating Shift Left (register). This instruction takes each element in the vector of the first source SIMD&FP register, shifts the element by a value from the least significant byte of the corresponding element of the second source SIMD&FP register, places the results in a vector, and writes the vector to the destination SIMD&FP register.
UQSHL Dd,Dn,#n
a → Dn
0 << n << 63
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = 0; integer shift; integer element; boolean sat; for e = 0 to elements-1 shift = SInt(Elem[operand2, e, esize]<7:0>); if rounding then round_const = 1 << (-shift - 1); // 0 for left shift, 2^(n-1) for right shift element = (Int(Elem[operand1, e, esize], unsigned) + round_const) << shift; if saturating then (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; else Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Signed saturating Shift Left Unsigned (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, shifts each value by an immediate value, saturates the shifted result to an unsigned integer value, places the result in a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see UQRSHL.
SQSHLU Vd.8B,Vn.8B,#n
a → Vn.8B
0 << n << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], src_unsigned) << shift; (Elem[result, e, esize], sat) = SatQ(element, esize, dst_unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Shift Left Unsigned (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, shifts each value by an immediate value, saturates the shifted result to an unsigned integer value, places the result in a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see UQRSHL.
SQSHLU Vd.16B,Vn.16B,#n
a → Vn.16B
0 << n << 7
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], src_unsigned) << shift; (Elem[result, e, esize], sat) = SatQ(element, esize, dst_unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Shift Left Unsigned (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, shifts each value by an immediate value, saturates the shifted result to an unsigned integer value, places the result in a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see UQRSHL.
SQSHLU Vd.4H,Vn.4H,#n
a → Vn.4H
0 << n << 15
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], src_unsigned) << shift; (Elem[result, e, esize], sat) = SatQ(element, esize, dst_unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Shift Left Unsigned (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, shifts each value by an immediate value, saturates the shifted result to an unsigned integer value, places the result in a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see UQRSHL.
SQSHLU Vd.8H,Vn.8H,#n
a → Vn.8H
0 << n << 15
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], src_unsigned) << shift; (Elem[result, e, esize], sat) = SatQ(element, esize, dst_unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Shift Left Unsigned (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, shifts each value by an immediate value, saturates the shifted result to an unsigned integer value, places the result in a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see UQRSHL.
SQSHLU Vd.2S,Vn.2S,#n
a → Vn.2S
0 << n << 31
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], src_unsigned) << shift; (Elem[result, e, esize], sat) = SatQ(element, esize, dst_unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Shift Left Unsigned (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, shifts each value by an immediate value, saturates the shifted result to an unsigned integer value, places the result in a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see UQRSHL.
SQSHLU Vd.4S,Vn.4S,#n
a → Vn.4S
0 << n << 31
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], src_unsigned) << shift; (Elem[result, e, esize], sat) = SatQ(element, esize, dst_unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Shift Left Unsigned (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, shifts each value by an immediate value, saturates the shifted result to an unsigned integer value, places the result in a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see UQRSHL.
SQSHLU Dd,Dn,#n
a → Dn
0 << n << 63
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], src_unsigned) << shift; (Elem[result, e, esize], sat) = SatQ(element, esize, dst_unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Shift Left Unsigned (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, shifts each value by an immediate value, saturates the shifted result to an unsigned integer value, places the result in a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see UQRSHL.
SQSHLU Vd.2D,Vn.2D,#n
a → Vn.2D
0 << n << 63
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], src_unsigned) << shift; (Elem[result, e, esize], sat) = SatQ(element, esize, dst_unsigned); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Shift Left Unsigned (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, shifts each value by an immediate value, saturates the shifted result to an unsigned integer value, places the result in a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see UQRSHL.
SQSHLU Bd,Bn,#n
a → Bn
0 << n << 7
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], src_unsigned) << shift; (Elem[result, e, esize], sat) = SatQ(element, esize, dst_unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Shift Left Unsigned (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, shifts each value by an immediate value, saturates the shifted result to an unsigned integer value, places the result in a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see UQRSHL.
SQSHLU Hd,Hn,#n
a → Hn
0 << n << 15
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], src_unsigned) << shift; (Elem[result, e, esize], sat) = SatQ(element, esize, dst_unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Shift Left Unsigned (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, shifts each value by an immediate value, saturates the shifted result to an unsigned integer value, places the result in a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see UQRSHL.
SQSHLU Sd,Sn,#n
a → Sn
0 << n << 31
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], src_unsigned) << shift; (Elem[result, e, esize], sat) = SatQ(element, esize, dst_unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Shift Left Unsigned (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, shifts each value by an immediate value, saturates the shifted result to an unsigned integer value, places the result in a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see UQRSHL.
SQSHLU Dd,Dn,#n
a → Dn
0 << n << 63
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], src_unsigned) << shift; (Elem[result, e, esize], sat) = SatQ(element, esize, dst_unsigned); if sat then FPSR.QC = '1'; V[d] = result;
A64
Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are truncated. For rounded results, see RSHRN.
SHRN Vd.8B,Vn.8H,#n
a → Vn.8H
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are truncated. For rounded results, see RSHRN.
SHRN Vd.4H,Vn.4S,#n
a → Vn.4S
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are truncated. For rounded results, see RSHRN.
SHRN Vd.2S,Vn.2D,#n
a → Vn.2D
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are truncated. For rounded results, see RSHRN.
SHRN Vd.8B,Vn.8H,#n
a → Vn.8H
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are truncated. For rounded results, see RSHRN.
SHRN Vd.4H,Vn.4S,#n
a → Vn.4S
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are truncated. For rounded results, see RSHRN.
SHRN Vd.2S,Vn.2D,#n
a → Vn.2D
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are truncated. For rounded results, see RSHRN.
SHRN2 Vd.16B,Vn.8H,#n
r → Vd.8B
a → Vn.8H
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are truncated. For rounded results, see RSHRN.
SHRN2 Vd.8H,Vn.4S,#n
r → Vd.4H
a → Vn.4S
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are truncated. For rounded results, see RSHRN.
SHRN2 Vd.4S,Vn.2D,#n
r → Vd.2S
a → Vn.2D
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are truncated. For rounded results, see RSHRN.
SHRN2 Vd.16B,Vn.8H,#n
r → Vd.8B
a → Vn.8H
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are truncated. For rounded results, see RSHRN.
SHRN2 Vd.8H,Vn.4S,#n
r → Vd.4H
a → Vn.4S
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are truncated. For rounded results, see RSHRN.
SHRN2 Vd.4S,Vn.2D,#n
r → Vd.2S
a → Vn.2D
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Signed saturating Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see SQRSHRUN.
SQSHRUN Vd.8B,Vn.8H,#n
a → Vn.8H
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see SQRSHRUN.
SQSHRUN Vd.4H,Vn.4S,#n
a → Vn.4S
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see SQRSHRUN.
SQSHRUN Vd.2S,Vn.2D,#n
a → Vn.2D
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see SQRSHRUN.
SQSHRUN Bd,Hn,#n
a → Hn
1 << n << 8
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see SQRSHRUN.
SQSHRUN Hd,Sn,#n
a → Sn
1 << n << 16
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see SQRSHRUN.
SQSHRUN Sd,Dn,#n
a → Dn
1 << n << 32
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see SQRSHRUN.
SQSHRUN2 Vd.16B,Vn.8H,#n
r → Vd.8B
a → Vn.8H
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see SQRSHRUN.
SQSHRUN2 Vd.8H,Vn.4S,#n
r → Vd.4H
a → Vn.4S
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are truncated. For rounded results, see SQRSHRUN.
SQSHRUN2 Vd.4S,Vn.2D,#n
r → Vd.2S
a → Vn.2D
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Rounded Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are rounded. For truncated results, see SQSHRUN.
SQRSHRUN Vd.8B,Vn.8H,#n
a → Vn.8H
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating Rounded Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are rounded. For truncated results, see SQSHRUN.
SQRSHRUN Vd.4H,Vn.4S,#n
a → Vn.4S
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating Rounded Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are rounded. For truncated results, see SQSHRUN.
SQRSHRUN Vd.2S,Vn.2D,#n
a → Vn.2D
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating Rounded Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are rounded. For truncated results, see SQSHRUN.
SQRSHRUN Bd,Hn,#n
a → Hn
1 << n << 8
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Rounded Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are rounded. For truncated results, see SQSHRUN.
SQRSHRUN Hd,Sn,#n
a → Sn
1 << n << 16
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Rounded Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are rounded. For truncated results, see SQSHRUN.
SQRSHRUN Sd,Dn,#n
a → Dn
1 << n << 32
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Rounded Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are rounded. For truncated results, see SQSHRUN.
SQRSHRUN2 Vd.16B,Vn.8H,#n
r → Vd.8B
a → Vn.8H
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Rounded Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are rounded. For truncated results, see SQSHRUN.
SQRSHRUN2 Vd.8H,Vn.4S,#n
r → Vd.4H
a → Vn.4S
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Rounded Shift Right Unsigned Narrow (immediate). This instruction reads each signed integer value in the vector of the source SIMD&FP register, right shifts each value by an immediate value, saturates the result to an unsigned integer value that is half the original width, places the final result into a vector, and writes the vector to the destination SIMD&FP register. The results are rounded. For truncated results, see SQSHRUN.
SQRSHRUN2 Vd.4S,Vn.2D,#n
r → Vd.2S
a → Vn.2D
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (SInt(Elem[operand, e, 2*esize]) + round_const) >> shift; (Elem[result, e, esize], sat) = UnsignedSatQ(element, esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts and truncates each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. For rounded results, see SQRSHRN.
SQSHRN Vd.8B,Vn.8H,#n
a → Vn.8H
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts and truncates each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. For rounded results, see SQRSHRN.
SQSHRN Vd.4H,Vn.4S,#n
a → Vn.4S
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts and truncates each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. For rounded results, see SQRSHRN.
SQSHRN Vd.2S,Vn.2D,#n
a → Vn.2D
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Unsigned saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see UQRSHRN.
UQSHRN Vd.8B,Vn.8H,#n
a → Vn.8H
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Unsigned saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see UQRSHRN.
UQSHRN Vd.4H,Vn.4S,#n
a → Vn.4S
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Unsigned saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see UQRSHRN.
UQSHRN Vd.2S,Vn.2D,#n
a → Vn.2D
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts and truncates each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. For rounded results, see SQRSHRN.
SQSHRN Bd,Hn,#n
a → Hn
1 << n << 8
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts and truncates each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. For rounded results, see SQRSHRN.
SQSHRN Hd,Sn,#n
a → Sn
1 << n << 16
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts and truncates each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. For rounded results, see SQRSHRN.
SQSHRN Sd,Dn,#n
a → Dn
1 << n << 32
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see UQRSHRN.
UQSHRN Bd,Hn,#n
a → Hn
1 << n << 8
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see UQRSHRN.
UQSHRN Hd,Sn,#n
a → Sn
1 << n << 16
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see UQRSHRN.
UQSHRN Sd,Dn,#n
a → Dn
1 << n << 32
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts and truncates each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. For rounded results, see SQRSHRN.
SQSHRN2 Vd.16B,Vn.8H,#n
r → Vd.8B
a → Vn.8H
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts and truncates each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. For rounded results, see SQRSHRN.
SQSHRN2 Vd.8H,Vn.4S,#n
r → Vd.4H
a → Vn.4S
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts and truncates each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. For rounded results, see SQRSHRN.
SQSHRN2 Vd.4S,Vn.2D,#n
r → Vd.2S
a → Vn.2D
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see UQRSHRN.
UQSHRN2 Vd.16B,Vn.8H,#n
r → Vd.8B
a → Vn.8H
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see UQRSHRN.
UQSHRN2 Vd.8H,Vn.4S,#n
r → Vd.4H
a → Vn.4S
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are truncated. For rounded results, see UQRSHRN.
UQSHRN2 Vd.4S,Vn.2D,#n
r → Vd.2S
a → Vn.2D
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Rounding Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the vector in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SHRN.
RSHRN Vd.8B,Vn.8H,#n
a → Vn.8H
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Rounding Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the vector in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SHRN.
RSHRN Vd.4H,Vn.4S,#n
a → Vn.4S
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Rounding Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the vector in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SHRN.
RSHRN Vd.2S,Vn.2D,#n
a → Vn.2D
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Rounding Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the vector in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SHRN.
RSHRN Vd.8B,Vn.8H,#n
a → Vn.8H
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Rounding Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the vector in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SHRN.
RSHRN Vd.4H,Vn.4S,#n
a → Vn.4S
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Rounding Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the vector in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SHRN.
RSHRN Vd.2S,Vn.2D,#n
a → Vn.2D
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Rounding Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the vector in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SHRN.
RSHRN2 Vd.16B,Vn.8H,#n
r → Vd.8B
a → Vn.8H
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Rounding Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the vector in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SHRN.
RSHRN2 Vd.8H,Vn.4S,#n
r → Vd.4H
a → Vn.4S
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Rounding Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the vector in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SHRN.
RSHRN2 Vd.4S,Vn.2D,#n
r → Vd.2S
a → Vn.2D
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Rounding Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the vector in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SHRN.
RSHRN2 Vd.16B,Vn.8H,#n
r → Vd.8B
a → Vn.8H
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Rounding Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the vector in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SHRN.
RSHRN2 Vd.8H,Vn.4S,#n
r → Vd.4H
a → Vn.4S
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Rounding Shift Right Narrow (immediate). This instruction reads each unsigned integer value from the vector in the source SIMD&FP register, right shifts each result by an immediate value, writes the final result to a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SHRN.
RSHRN2 Vd.4S,Vn.2D,#n
r → 32(Vd)
a → Vn.2D
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; for e = 0 to elements-1 element = (UInt(Elem[operand, e, 2*esize]) + round_const) >> shift; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Signed saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SQSHRN.
SQRSHRN Vd.8B,Vn.8H,#n
a → Vn.8H
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SQSHRN.
SQRSHRN Vd.4H,Vn.4S,#n
a → Vn.4S
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SQSHRN.
SQRSHRN Vd.2S,Vn.2D,#n
a → Vn.2D
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Unsigned saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see UQSHRN.
UQRSHRN Vd.8B,Vn.8H,#n
a → Vn.8H
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Unsigned saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see UQSHRN.
UQRSHRN Vd.4H,Vn.4S,#n
a → Vn.4S
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Unsigned saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see UQSHRN.
UQRSHRN Vd.2S,Vn.2D,#n
a → Vn.2D
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SQSHRN.
SQRSHRN Bd,Hn,#n
a → Hn
1 << n << 8
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SQSHRN.
SQRSHRN Hd,Sn,#n
a → Sn
1 << n << 16
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SQSHRN.
SQRSHRN Sd,Dn,#n
a → Dn
1 << n << 32
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see UQSHRN.
UQRSHRN Bd,Hn,#n
a → Hn
1 << n << 8
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see UQSHRN.
UQRSHRN Hd,Sn,#n
a → Sn
1 << n << 16
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see UQSHRN.
UQRSHRN Sd,Dn,#n
a → Dn
1 << n << 32
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SQSHRN.
SQRSHRN2 Vd.16B,Vn.8H,#n
r → Vd.8B
a → Vn.8H
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SQSHRN.
SQRSHRN2 Vd.8H,Vn.4S,#n
r → Vd.4H
a → Vn.4S
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, saturates each shifted result to a value that is half the original width, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are signed integer values. The destination vector elements are half as long as the source vector elements. The results are rounded. For truncated results, see SQSHRN.
SQRSHRN2 Vd.4S,Vn.2D,#n
r → Vd.2S
a → Vn.2D
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see UQSHRN.
UQRSHRN2 Vd.16B,Vn.8H,#n
r → Vd.8B
a → Vn.8H
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see UQSHRN.
UQRSHRN2 Vd.8H,Vn.4S,#n
r → Vd.4H
a → Vn.4S
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating Rounded Shift Right Narrow (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each result by an immediate value, puts the final result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. All the values in this instruction are unsigned integer values. The results are rounded. For truncated results, see UQSHRN.
UQRSHRN2 Vd.4S,Vn.2D,#n
r → Vd.2S
a → Vn.2D
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize*2) operand = V[n]; bits(datasize) result; integer round_const = if round then (1 << (shift - 1)) else 0; integer element; boolean sat; for e = 0 to elements-1 element = (Int(Elem[operand, e, 2*esize], unsigned) + round_const) >> shift; (Elem[result, e, esize], sat) = SatQ(element, esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed Shift Left Long (immediate). This instruction reads each vector element from the source SIMD&FP register, left shifts each vector element by the specified shift amount, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SSHLL Vd.8H,Vn.8B,#n
a → Vn.8B
0 << n << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Left Long (immediate). This instruction reads each vector element from the source SIMD&FP register, left shifts each vector element by the specified shift amount, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SSHLL Vd.4S,Vn.4H,#n
a → Vn.4H
0 << n << 15
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Left Long (immediate). This instruction reads each vector element from the source SIMD&FP register, left shifts each vector element by the specified shift amount, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SSHLL Vd.2D,Vn.2S,#n
a → Vn.2S
0 << n << 31
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Left Long (immediate). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, shifts the unsigned integer value left by the specified number of bits, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
USHLL Vd.8H,Vn.8B,#n
a → Vn.8B
0 << n << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Left Long (immediate). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, shifts the unsigned integer value left by the specified number of bits, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
USHLL Vd.4S,Vn.4H,#n
a → Vn.4H
0 << n << 15
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Left Long (immediate). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, shifts the unsigned integer value left by the specified number of bits, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
USHLL Vd.2D,Vn.2S,#n
a → Vn.2S
0 << n << 31
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Left Long (immediate). This instruction reads each vector element from the source SIMD&FP register, left shifts each vector element by the specified shift amount, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SSHLL2 Vd.8H,Vn.16B,#n
a → Vn.16B
0 << n << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Signed Shift Left Long (immediate). This instruction reads each vector element from the source SIMD&FP register, left shifts each vector element by the specified shift amount, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SSHLL2 Vd.4S,Vn.8H,#n
a → Vn.8H
0 << n << 15
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Signed Shift Left Long (immediate). This instruction reads each vector element from the source SIMD&FP register, left shifts each vector element by the specified shift amount, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SSHLL2 Vd.2D,Vn.4S,#n
a → Vn.4S
0 << n << 31
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Unsigned Shift Left Long (immediate). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, shifts the unsigned integer value left by the specified number of bits, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
USHLL2 Vd.8H,Vn.16B,#n
a → Vn.16B
0 << n << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Unsigned Shift Left Long (immediate). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, shifts the unsigned integer value left by the specified number of bits, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
USHLL2 Vd.4S,Vn.8H,#n
a → Vn.8H
0 << n << 15
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Unsigned Shift Left Long (immediate). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, shifts the unsigned integer value left by the specified number of bits, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
USHLL2 Vd.2D,Vn.4S,#n
a → Vn.4S
0 << n << 31
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Shift Left Long (by element size). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, left shifts each result by the element size, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SHLL Vd.8H,Vn.8B,#n
a → Vn.8B
8 << n << 8
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(2*datasize) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Shift Left Long (by element size). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, left shifts each result by the element size, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SHLL Vd.4S,Vn.4H,#n
a → Vn.4H
16 << n << 16
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(2*datasize) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Shift Left Long (by element size). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, left shifts each result by the element size, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SHLL Vd.2D,Vn.2S,#n
a → Vn.2S
32 << n << 32
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(2*datasize) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Shift Left Long (by element size). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, left shifts each result by the element size, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SHLL Vd.8H,Vn.8B,#n
a → Vn.8B
8 << n << 8
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(2*datasize) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Shift Left Long (by element size). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, left shifts each result by the element size, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SHLL Vd.4S,Vn.4H,#n
a → Vn.4H
16 << n << 16
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(2*datasize) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Shift Left Long (by element size). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, left shifts each result by the element size, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SHLL Vd.2D,Vn.2S,#n
a → Vn.2S
32 << n << 32
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(2*datasize) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Shift Left Long (by element size). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, left shifts each result by the element size, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SHLL2 Vd.8H,Vn.16B,#n
a → Vn.16B
8 << n << 8
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(2*datasize) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Shift Left Long (by element size). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, left shifts each result by the element size, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SHLL2 Vd.4S,Vn.8H,#n
a → Vn.8H
16 << n << 16
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(2*datasize) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Shift Left Long (by element size). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, left shifts each result by the element size, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SHLL2 Vd.2D,Vn.4S,#n
a → Vn.4S
32 << n << 32
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(2*datasize) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Shift Left Long (by element size). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, left shifts each result by the element size, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SHLL2 Vd.8H,Vn.16B,#n
a → Vn.16B
8 << n << 8
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(2*datasize) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Shift Left Long (by element size). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, left shifts each result by the element size, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SHLL2 Vd.4S,Vn.8H,#n
a → Vn.8H
16 << n << 16
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(2*datasize) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Shift Left Long (by element size). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, left shifts each result by the element size, writes the final result to a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SHLL2 Vd.2D,Vn.4S,#n
a → Vn.4S
32 << n << 32
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(2*datasize) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.8B,Vn.8B,#n
a → Vd.8B
b → Vn.8B
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.16B,Vn.16B,#n
a → Vd.16B
b → Vn.16B
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.4H,Vn.4H,#n
a → Vd.4H
b → Vn.4H
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.8H,Vn.8H,#n
a → Vd.8H
b → Vn.8H
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.2S,Vn.2S,#n
a → Vd.2S
b → Vn.2S
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.4S,Vn.4S,#n
a → Vd.4S
b → Vn.4S
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Dd,Dn,#n
a → Dd
b → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.2D,Vn.2D,#n
a → Vd.2D
b → Vn.2D
1 << n << 64
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.8B,Vn.8B,#n
a → Vd.8B
b → Vn.8B
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.16B,Vn.16B,#n
a → Vd.16B
b → Vn.16B
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.4H,Vn.4H,#n
a → Vd.4H
b → Vn.4H
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.8H,Vn.8H,#n
a → Vd.8H
b → Vn.8H
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.2S,Vn.2S,#n
a → Vd.2S
b → Vn.2S
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.4S,Vn.4S,#n
a → Vd.4S
b → Vn.4S
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Dd,Dn,#n
a → Dd
b → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.2D,Vn.2D,#n
a → Vd.2D
b → Vn.2D
1 << n << 64
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Dd,Dn,#n
a → Dd
b → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.2D,Vn.2D,#n
a → Vd.2D
b → Vn.2D
1 << n << 64
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.8B,Vn.8B,#n
a → Vd.8B
b → Vn.8B
1 << n << 8
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.16B,Vn.16B,#n
a → Vd.16B
b → Vn.16B
1 << n << 8
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.4H,Vn.4H,#n
a → Vd.4H
b → Vn.4H
1 << n << 16
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Vd.8H,Vn.8H,#n
a → Vd.8H
b → Vn.8H
1 << n << 16
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Dd,Dn,#n
a → Dd
b → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
A64
Shift Right and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, right shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the right of each vector element of the source register are lost.
SRI Dd,Dn,#n
a → Dd
b → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSR(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSR(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.8B,Vn.8B,#n
a → Vd.8B
b → Vn.8B
0 << n << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.16B,Vn.16B,#n
a → Vd.16B
b → Vn.16B
0 << n << 7
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.4H,Vn.4H,#n
a → Vd.4H
b → Vn.4H
0 << n << 15
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.8H,Vn.8H,#n
a → Vd.8H
b → Vn.8H
0 << n << 15
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.2S,Vn.2S,#n
a → Vd.2S
b → Vn.2S
0 << n << 31
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.4S,Vn.4S,#n
a → Vd.4S
b → Vn.4S
0 << n << 31
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Dd,Dn,#n
a → Dd
b → Dn
0 << n << 63
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.2D,Vn.2D,#n
a → Vd.2D
b → Vn.2D
0 << n << 63
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.8B,Vn.8B,#n
a → Vd.8B
b → Vn.8B
0 << n << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.16B,Vn.16B,#n
a → Vd.16B
b → Vn.16B
0 << n << 7
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.4H,Vn.4H,#n
a → Vd.4H
b → Vn.4H
0 << n << 15
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.8H,Vn.8H,#n
a → Vd.8H
b → Vn.8H
0 << n << 15
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.2S,Vn.2S,#n
a → Vd.2S
b → Vn.2S
0 << n << 31
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.4S,Vn.4S,#n
a → Vd.4S
b → Vn.4S
0 << n << 31
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Dd,Dn,#n
a → Dd
b → Dn
0 << n << 63
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.2D,Vn.2D,#n
a → Vd.2D
b → Vn.2D
0 << n << 63
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Dd,Dn,#n
a → Dd
b → Dn
0 << n << 63
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.2D,Vn.2D,#n
a → Vd.2D
b → Vn.2D
0 << n << 63
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.8B,Vn.8B,#n
a → Vd.8B
b → Vn.8B
0 << n << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.16B,Vn.16B,#n
a → Vd.16B
b → Vn.16B
0 << n << 7
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.4H,Vn.4H,#n
a → Vd.4H
b → Vn.4H
0 << n << 15
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Vd.8H,Vn.8H,#n
a → Vd.8H
b → Vn.8H
0 << n << 15
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
v7/A32/A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Dd,Dn,#n
a → Dd
b → Dn
0 << n << 63
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
A64
Shift Left and Insert (immediate). This instruction reads each vector element in the source SIMD&FP register, left shifts each vector element by an immediate value, and inserts the result into the corresponding vector element in the destination SIMD&FP register such that the new zero bits created by the shift are not inserted but retain their existing value. Bits shifted out of the left of each vector element in the source register are lost.
SLI Dd,Dn,#n
a → Dd
b → Dn
0 << n << 63
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) operand2 = V[d]; bits(datasize) result; bits(esize) mask = LSL(Ones(esize), shift); bits(esize) shifted; for e = 0 to elements-1 shifted = LSL(Elem[operand, e, esize], shift); Elem[result, e, esize] = (Elem[operand2, e, esize] AND NOT(mask)) OR shifted; V[d] = result;
A64
Floating-point Convert to Signed integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZS Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
v7/A32/A64
Floating-point Convert to Signed integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZS Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
v7/A32/A64
Floating-point Convert to Unsigned integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZU Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
v7/A32/A64
Floating-point Convert to Unsigned integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZU Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
v7/A32/A64
Floating-point Convert to Signed integer, rounding to nearest with ties to even (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round to Nearest rounding mode, and writes the result to the SIMD&FP destination register.
FCVTNS Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A32/A64
Floating-point Convert to Signed integer, rounding to nearest with ties to even (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round to Nearest rounding mode, and writes the result to the SIMD&FP destination register.
FCVTNS Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A32/A64
Floating-point Convert to Unsigned integer, rounding to nearest with ties to even (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round to Nearest rounding mode, and writes the result to the SIMD&FP destination register.
FCVTNU Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A32/A64
Floating-point Convert to Unsigned integer, rounding to nearest with ties to even (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round to Nearest rounding mode, and writes the result to the SIMD&FP destination register.
FCVTNU Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A32/A64
Floating-point Convert to Signed integer, rounding toward Minus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Minus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTMS Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A32/A64
Floating-point Convert to Signed integer, rounding toward Minus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Minus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTMS Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A32/A64
Floating-point Convert to Unsigned integer, rounding toward Minus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Minus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTMU Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A32/A64
Floating-point Convert to Unsigned integer, rounding toward Minus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Minus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTMU Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A32/A64
Floating-point Convert to Signed integer, rounding toward Plus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Plus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTPS Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A32/A64
Floating-point Convert to Signed integer, rounding toward Plus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Plus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTPS Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A32/A64
Floating-point Convert to Unsigned integer, rounding toward Plus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Plus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTPU Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A32/A64
Floating-point Convert to Unsigned integer, rounding toward Plus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Plus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTPU Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A32/A64
Floating-point Convert to Signed integer, rounding to nearest with ties to Away (vector). This instruction converts each element in a vector from a floating-point value to a signed integer value using the Round to Nearest with Ties to Away rounding mode and writes the result to the SIMD&FP destination register.
FCVTAS Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A32/A64
Floating-point Convert to Signed integer, rounding to nearest with ties to Away (vector). This instruction converts each element in a vector from a floating-point value to a signed integer value using the Round to Nearest with Ties to Away rounding mode and writes the result to the SIMD&FP destination register.
FCVTAS Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A32/A64
Floating-point Convert to Unsigned integer, rounding to nearest with ties to Away (vector). This instruction converts each element in a vector from a floating-point value to an unsigned integer value using the Round to Nearest with Ties to Away rounding mode and writes the result to the SIMD&FP destination register.
FCVTAU Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A32/A64
Floating-point Convert to Unsigned integer, rounding to nearest with ties to Away (vector). This instruction converts each element in a vector from a floating-point value to an unsigned integer value using the Round to Nearest with Ties to Away rounding mode and writes the result to the SIMD&FP destination register.
FCVTAU Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A32/A64
Floating-point Convert to Signed integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZS Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZU Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding to nearest with ties to even (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round to Nearest rounding mode, and writes the result to the SIMD&FP destination register.
FCVTNS Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding to nearest with ties to even (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round to Nearest rounding mode, and writes the result to the SIMD&FP destination register.
FCVTNU Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding toward Minus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Minus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTMS Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding toward Minus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Minus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTMU Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding toward Plus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Plus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTPS Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding toward Plus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Plus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTPU Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding to nearest with ties to Away (vector). This instruction converts each element in a vector from a floating-point value to a signed integer value using the Round to Nearest with Ties to Away rounding mode and writes the result to the SIMD&FP destination register.
FCVTAS Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding to nearest with ties to Away (vector). This instruction converts each element in a vector from a floating-point value to an unsigned integer value using the Round to Nearest with Ties to Away rounding mode and writes the result to the SIMD&FP destination register.
FCVTAU Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZS Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZS Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZU Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZU Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding to nearest with ties to even (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round to Nearest rounding mode, and writes the result to the SIMD&FP destination register.
FCVTNS Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding to nearest with ties to even (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round to Nearest rounding mode, and writes the result to the SIMD&FP destination register.
FCVTNS Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding to nearest with ties to even (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round to Nearest rounding mode, and writes the result to the SIMD&FP destination register.
FCVTNU Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding to nearest with ties to even (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round to Nearest rounding mode, and writes the result to the SIMD&FP destination register.
FCVTNU Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding toward Minus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Minus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTMS Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding toward Minus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Minus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTMS Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding toward Minus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Minus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTMU Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding toward Minus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Minus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTMU Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding toward Plus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Plus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTPS Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding toward Plus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Plus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTPS Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding toward Plus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Plus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTPU Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding toward Plus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Plus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTPU Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding to nearest with ties to Away (vector). This instruction converts each element in a vector from a floating-point value to a signed integer value using the Round to Nearest with Ties to Away rounding mode and writes the result to the SIMD&FP destination register.
FCVTAS Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding to nearest with ties to Away (vector). This instruction converts each element in a vector from a floating-point value to a signed integer value using the Round to Nearest with Ties to Away rounding mode and writes the result to the SIMD&FP destination register.
FCVTAS Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding to nearest with ties to Away (vector). This instruction converts each element in a vector from a floating-point value to an unsigned integer value using the Round to Nearest with Ties to Away rounding mode and writes the result to the SIMD&FP destination register.
FCVTAU Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding to nearest with ties to Away (vector). This instruction converts each element in a vector from a floating-point value to an unsigned integer value using the Round to Nearest with Ties to Away rounding mode and writes the result to the SIMD&FP destination register.
FCVTAU Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZS Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZU Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding to nearest with ties to even (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round to Nearest rounding mode, and writes the result to the SIMD&FP destination register.
FCVTNS Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding to nearest with ties to even (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round to Nearest rounding mode, and writes the result to the SIMD&FP destination register.
FCVTNU Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding toward Minus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Minus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTMS Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding toward Minus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Minus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTMU Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding toward Plus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Plus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTPS Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding toward Plus infinity (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Plus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FCVTPU Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding to nearest with ties to Away (vector). This instruction converts each element in a vector from a floating-point value to a signed integer value using the Round to Nearest with Ties to Away rounding mode and writes the result to the SIMD&FP destination register.
FCVTAS Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding to nearest with ties to Away (vector). This instruction converts each element in a vector from a floating-point value to an unsigned integer value using the Round to Nearest with Ties to Away rounding mode and writes the result to the SIMD&FP destination register.
FCVTAU Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZS Vd.2S,Vn.2S,#n
a → Vn.2S
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
v7/A32/A64
Floating-point Convert to Signed integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZS Vd.4S,Vn.4S,#n
a → Vn.4S
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
v7/A32/A64
Floating-point Convert to Unsigned integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZU Vd.2S,Vn.2S,#n
a → Vn.2S
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
v7/A32/A64
Floating-point Convert to Unsigned integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZU Vd.4S,Vn.4S,#n
a → Vn.4S
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
v7/A32/A64
Floating-point Convert to Signed integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZS Sd,Sn,#n
a → Sn
1 << n << 32
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZU Sd,Sn,#n
a → Sn
1 << n << 32
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZS Dd,Dn,#n
a → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZS Vd.2D,Vn.2D,#n
a → Vn.2D
1 << n << 64
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZU Dd,Dn,#n
a → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZU Vd.2D,Vn.2D,#n
a → Vn.2D
1 << n << 64
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Signed integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to a signed integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZS Dd,Dn,#n
a → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to Unsigned integer, rounding toward Zero (vector). This instruction converts a scalar or each element in a vector from a floating-point value to an unsigned integer value using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FCVTZU Dd,Dn,#n
a → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPToFixed(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Signed integer Convert to Floating-point (vector). This instruction converts each element in a vector from signed integer to floating-point using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
SCVTF Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
v7/A32/A64
Signed integer Convert to Floating-point (vector). This instruction converts each element in a vector from signed integer to floating-point using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
SCVTF Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
v7/A32/A64
Unsigned integer Convert to Floating-point (vector). This instruction converts each element in a vector from an unsigned integer value to a floating-point value using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
UCVTF Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
v7/A32/A64
Unsigned integer Convert to Floating-point (vector). This instruction converts each element in a vector from an unsigned integer value to a floating-point value using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
UCVTF Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
v7/A32/A64
Signed integer Convert to Floating-point (vector). This instruction converts each element in a vector from signed integer to floating-point using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
SCVTF Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Unsigned integer Convert to Floating-point (vector). This instruction converts each element in a vector from an unsigned integer value to a floating-point value using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
UCVTF Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Signed integer Convert to Floating-point (vector). This instruction converts each element in a vector from signed integer to floating-point using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
SCVTF Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Signed integer Convert to Floating-point (vector). This instruction converts each element in a vector from signed integer to floating-point using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
SCVTF Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Unsigned integer Convert to Floating-point (vector). This instruction converts each element in a vector from an unsigned integer value to a floating-point value using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
UCVTF Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Unsigned integer Convert to Floating-point (vector). This instruction converts each element in a vector from an unsigned integer value to a floating-point value using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
UCVTF Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Signed integer Convert to Floating-point (vector). This instruction converts each element in a vector from signed integer to floating-point using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
SCVTF Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Unsigned integer Convert to Floating-point (vector). This instruction converts each element in a vector from an unsigned integer value to a floating-point value using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
UCVTF Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Signed integer Convert to Floating-point (vector). This instruction converts each element in a vector from signed integer to floating-point using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
SCVTF Vd.2S,Vn.2S,#n
a → Vn.2S
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
v7/A32/A64
Signed integer Convert to Floating-point (vector). This instruction converts each element in a vector from signed integer to floating-point using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
SCVTF Vd.4S,Vn.4S,#n
a → Vn.4S
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
v7/A32/A64
Unsigned integer Convert to Floating-point (vector). This instruction converts each element in a vector from an unsigned integer value to a floating-point value using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
UCVTF Vd.2S,Vn.2S,#n
a → Vn.2S
1 << n << 32
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
v7/A32/A64
Unsigned integer Convert to Floating-point (vector). This instruction converts each element in a vector from an unsigned integer value to a floating-point value using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
UCVTF Vd.4S,Vn.4S,#n
a → Vn.4S
1 << n << 32
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
v7/A32/A64
Signed integer Convert to Floating-point (vector). This instruction converts each element in a vector from signed integer to floating-point using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
SCVTF Sd,Sn,#n
a → Sn
1 << n << 32
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Unsigned integer Convert to Floating-point (vector). This instruction converts each element in a vector from an unsigned integer value to a floating-point value using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
UCVTF Sd,Sn,#n
a → Sn
1 << n << 32
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Signed integer Convert to Floating-point (vector). This instruction converts each element in a vector from signed integer to floating-point using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
SCVTF Dd,Dn,#n
a → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Signed integer Convert to Floating-point (vector). This instruction converts each element in a vector from signed integer to floating-point using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
SCVTF Vd.2D,Vn.2D,#n
a → Vn.2D
1 << n << 64
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Unsigned integer Convert to Floating-point (vector). This instruction converts each element in a vector from an unsigned integer value to a floating-point value using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
UCVTF Dd,Dn,#n
a → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Unsigned integer Convert to Floating-point (vector). This instruction converts each element in a vector from an unsigned integer value to a floating-point value using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
UCVTF Vd.2D,Vn.2D,#n
a → Vn.2D
1 << n << 64
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Signed integer Convert to Floating-point (vector). This instruction converts each element in a vector from signed integer to floating-point using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
SCVTF Dd,Dn,#n
a → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Unsigned integer Convert to Floating-point (vector). This instruction converts each element in a vector from an unsigned integer value to a floating-point value using the rounding mode that is specified by the FPCR, and writes the result to the SIMD&FP destination register.
UCVTF Dd,Dn,#n
a → Dn
1 << n << 64
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; FPRounding rounding = FPRoundingMode(FPCR); bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FixedToFP(element, 0, unsigned, FPCR, rounding); V[d] = result;
A64
Floating-point Convert to lower precision Narrow (vector). This instruction reads each vector element in the SIMD&FP source register, converts each result to half the precision of the source element, writes the final result to a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The rounding mode is determined by the FPCR.
FCVTN Vd.4H,Vn.4S
a → Vn.4S
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = FPConvert(Elem[operand, e, 2*esize], FPCR); Vpart[d, part] = result;
v7/A32/A64
Floating-point Convert to lower precision Narrow (vector). This instruction reads each vector element in the SIMD&FP source register, converts each result to half the precision of the source element, writes the final result to a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The rounding mode is determined by the FPCR.
FCVTN2 Vd.8H,Vn.4S
r → Vd.4H
a → Vn.4S
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = FPConvert(Elem[operand, e, 2*esize], FPCR); Vpart[d, part] = result;
A64
Floating-point Convert to lower precision Narrow (vector). This instruction reads each vector element in the SIMD&FP source register, converts each result to half the precision of the source element, writes the final result to a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The rounding mode is determined by the FPCR.
FCVTN Vd.2S,Vn.2D
a → Vn.2D
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = FPConvert(Elem[operand, e, 2*esize], FPCR); Vpart[d, part] = result;
A64
Floating-point Convert to lower precision Narrow (vector). This instruction reads each vector element in the SIMD&FP source register, converts each result to half the precision of the source element, writes the final result to a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. The rounding mode is determined by the FPCR.
FCVTN2 Vd.4S,Vn.2D
r → Vd.2S
a → Vn.2D
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = FPConvert(Elem[operand, e, 2*esize], FPCR); Vpart[d, part] = result;
A64
Floating-point Convert to higher precision Long (vector). This instruction reads each element in a vector in the SIMD&FP source register, converts each value to double the precision of the source element using the rounding mode that is determined by the FPCR, and writes each result to the equivalent element of the vector in the SIMD&FP destination register.
FCVTL Vd.4S,Vn.4H
a → Vn.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(2*datasize) result; for e = 0 to elements-1 Elem[result, e, 2*esize] = FPConvert(Elem[operand, e, esize], FPCR); V[d] = result;
v7/A32/A64
Floating-point Convert to higher precision Long (vector). This instruction reads each element in a vector in the SIMD&FP source register, converts each value to double the precision of the source element using the rounding mode that is determined by the FPCR, and writes each result to the equivalent element of the vector in the SIMD&FP destination register.
FCVTL2 Vd.4S,Vn.8H
a → Vn.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(2*datasize) result; for e = 0 to elements-1 Elem[result, e, 2*esize] = FPConvert(Elem[operand, e, esize], FPCR); V[d] = result;
A64
Floating-point Convert to higher precision Long (vector). This instruction reads each element in a vector in the SIMD&FP source register, converts each value to double the precision of the source element using the rounding mode that is determined by the FPCR, and writes each result to the equivalent element of the vector in the SIMD&FP destination register.
FCVTL Vd.2D,Vn.2S
a → Vn.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(2*datasize) result; for e = 0 to elements-1 Elem[result, e, 2*esize] = FPConvert(Elem[operand, e, esize], FPCR); V[d] = result;
A64
Floating-point Convert to higher precision Long (vector). This instruction reads each element in a vector in the SIMD&FP source register, converts each value to double the precision of the source element using the rounding mode that is determined by the FPCR, and writes each result to the equivalent element of the vector in the SIMD&FP destination register.
FCVTL2 Vd.2D,Vn.4S
a → Vn.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(2*datasize) result; for e = 0 to elements-1 Elem[result, e, 2*esize] = FPConvert(Elem[operand, e, esize], FPCR); V[d] = result;
A64
Floating-point Convert to lower precision Narrow, rounding to odd (vector). This instruction reads each vector element in the source SIMD&FP register, narrows each value to half the precision of the source element using the Round to Odd rounding mode, writes the result to a vector, and writes the vector to the destination SIMD&FP register.
FCVTXN Vd.2S,Vn.2D
a → Vn.2D
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = FPConvert(Elem[operand, e, 2*esize], FPCR, FPRounding_ODD); Vpart[d, part] = result;
A64
Floating-point Convert to lower precision Narrow, rounding to odd (vector). This instruction reads each vector element in the source SIMD&FP register, narrows each value to half the precision of the source element using the Round to Odd rounding mode, writes the result to a vector, and writes the vector to the destination SIMD&FP register.
FCVTXN Sd,Dn
a → Dn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = FPConvert(Elem[operand, e, 2*esize], FPCR, FPRounding_ODD); Vpart[d, part] = result;
A64
Floating-point Convert to lower precision Narrow, rounding to odd (vector). This instruction reads each vector element in the source SIMD&FP register, narrows each value to half the precision of the source element using the Round to Odd rounding mode, writes the result to a vector, and writes the vector to the destination SIMD&FP register.
FCVTXN2 Vd.4S,Vn.2D
r → Vd.2S
a → Vn.2D
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = FPConvert(Elem[operand, e, 2*esize], FPCR, FPRounding_ODD); Vpart[d, part] = result;
A64
Floating-point Round to Integral, toward Zero (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FRINTZ Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A32/A64
Floating-point Round to Integral, toward Zero (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FRINTZ Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A32/A64
Floating-point Round to Integral, toward Zero (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FRINTZ Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A64
Floating-point Round to Integral, toward Zero (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round towards Zero rounding mode, and writes the result to the SIMD&FP destination register.
FRINTZ Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A64
Floating-point Round to Integral, to nearest with ties to even (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round to Nearest rounding mode, and writes the result to the SIMD&FP destination register.
FRINTN Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A32/A64
Floating-point Round to Integral, to nearest with ties to even (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round to Nearest rounding mode, and writes the result to the SIMD&FP destination register.
FRINTN Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A32/A64
Floating-point Round to Integral, to nearest with ties to even (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round to Nearest rounding mode, and writes the result to the SIMD&FP destination register.
FRINTN Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A32/A64
Floating-point Round to Integral, to nearest with ties to even (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round to Nearest rounding mode, and writes the result to the SIMD&FP destination register.
FRINTN Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A32/A64
Floating-point Round to Integral, to nearest with ties to even (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round to Nearest rounding mode, and writes the result to the SIMD&FP destination register.
FRINTN Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A32/A64
Floating-point Round to Integral, toward Minus infinity (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round towards Minus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FRINTM Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A32/A64
Floating-point Round to Integral, toward Minus infinity (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round towards Minus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FRINTM Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A32/A64
Floating-point Round to Integral, toward Minus infinity (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round towards Minus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FRINTM Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A64
Floating-point Round to Integral, toward Minus infinity (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round towards Minus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FRINTM Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A64
Floating-point Round to Integral, toward Plus infinity (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round towards Plus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FRINTP Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A32/A64
Floating-point Round to Integral, toward Plus infinity (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round towards Plus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FRINTP Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A32/A64
Floating-point Round to Integral, toward Plus infinity (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round towards Plus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FRINTP Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A64
Floating-point Round to Integral, toward Plus infinity (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round towards Plus Infinity rounding mode, and writes the result to the SIMD&FP destination register.
FRINTP Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A64
Floating-point Round to Integral, to nearest with ties to Away (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round to Nearest with Ties to Away rounding mode, and writes the result to the SIMD&FP destination register.
FRINTA Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A32/A64
Floating-point Round to Integral, to nearest with ties to Away (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round to Nearest with Ties to Away rounding mode, and writes the result to the SIMD&FP destination register.
FRINTA Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A32/A64
Floating-point Round to Integral, to nearest with ties to Away (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round to Nearest with Ties to Away rounding mode, and writes the result to the SIMD&FP destination register.
FRINTA Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A64
Floating-point Round to Integral, to nearest with ties to Away (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the Round to Nearest with Ties to Away rounding mode, and writes the result to the SIMD&FP destination register.
FRINTA Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A64
Floating-point Round to Integral, using current rounding mode (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the rounding mode that is determined by the FPCR, and writes the result to the SIMD&FP destination register.
FRINTI Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A32/A64
Floating-point Round to Integral, using current rounding mode (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the rounding mode that is determined by the FPCR, and writes the result to the SIMD&FP destination register.
FRINTI Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A32/A64
Floating-point Round to Integral, using current rounding mode (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the rounding mode that is determined by the FPCR, and writes the result to the SIMD&FP destination register.
FRINTI Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A64
Floating-point Round to Integral, using current rounding mode (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the rounding mode that is determined by the FPCR, and writes the result to the SIMD&FP destination register.
FRINTI Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A64
Floating-point Round to Integral exact, using current rounding mode (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the rounding mode that is determined by the FPCR, and writes the result to the SIMD&FP destination register.
FRINTX Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A32/A64
Floating-point Round to Integral exact, using current rounding mode (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the rounding mode that is determined by the FPCR, and writes the result to the SIMD&FP destination register.
FRINTX Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A32/A64
Floating-point Round to Integral exact, using current rounding mode (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the rounding mode that is determined by the FPCR, and writes the result to the SIMD&FP destination register.
FRINTX Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A64
Floating-point Round to Integral exact, using current rounding mode (vector). This instruction rounds a vector of floating-point values in the SIMD&FP source register to integral floating-point values of the same size using the rounding mode that is determined by the FPCR, and writes the result to the SIMD&FP destination register.
FRINTX Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); V[d] = result;
A64
Extract Narrow. This instruction reads each vector element from the source SIMD&FP register, narrows each value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
XTN Vd.8B,Vn.8H
a → Vn.8H
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Extract Narrow. This instruction reads each vector element from the source SIMD&FP register, narrows each value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
XTN Vd.4H,Vn.4S
a → Vn.4S
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Extract Narrow. This instruction reads each vector element from the source SIMD&FP register, narrows each value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
XTN Vd.2S,Vn.2D
a → Vn.2D
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Extract Narrow. This instruction reads each vector element from the source SIMD&FP register, narrows each value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
XTN Vd.8B,Vn.8H
a → Vn.8H
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Extract Narrow. This instruction reads each vector element from the source SIMD&FP register, narrows each value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
XTN Vd.4H,Vn.4S
a → Vn.4S
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Extract Narrow. This instruction reads each vector element from the source SIMD&FP register, narrows each value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
XTN Vd.2S,Vn.2D
a → Vn.2D
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
v7/A32/A64
Extract Narrow. This instruction reads each vector element from the source SIMD&FP register, narrows each value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
XTN2 Vd.16B,Vn.8H
r → Vd.8B
a → Vn.8H
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Extract Narrow. This instruction reads each vector element from the source SIMD&FP register, narrows each value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
XTN2 Vd.8H,Vn.4S
r → Vd.4H
a → Vn.4S
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Extract Narrow. This instruction reads each vector element from the source SIMD&FP register, narrows each value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
XTN2 Vd.4S,Vn.2D
r → Vd.2S
a → Vn.2D
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Extract Narrow. This instruction reads each vector element from the source SIMD&FP register, narrows each value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
XTN2 Vd.16B,Vn.8H
r → Vd.8B
a → Vn.8H
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Extract Narrow. This instruction reads each vector element from the source SIMD&FP register, narrows each value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
XTN2 Vd.8H,Vn.4S
r → Vd.4H
a → Vn.4S
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Extract Narrow. This instruction reads each vector element from the source SIMD&FP register, narrows each value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
XTN2 Vd.4S,Vn.2D
r → Vd.2S
a → Vn.2D
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; Elem[result, e, esize] = element<esize-1:0>; Vpart[d, part] = result;
A64
Signed Shift Left Long (immediate). This instruction reads each vector element from the source SIMD&FP register, left shifts each vector element by the specified shift amount, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SSHLL Vd.8H,Vn.8B,#0
a → Vn.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Left Long (immediate). This instruction reads each vector element from the source SIMD&FP register, left shifts each vector element by the specified shift amount, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SSHLL Vd.4S,Vn.4H,#0
a → Vn.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Left Long (immediate). This instruction reads each vector element from the source SIMD&FP register, left shifts each vector element by the specified shift amount, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SSHLL Vd.2D,Vn.2S,#0
a → Vn.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Left Long (immediate). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, shifts the unsigned integer value left by the specified number of bits, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
USHLL Vd.8H,Vn.8B,#0
a → Vn.8B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Left Long (immediate). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, shifts the unsigned integer value left by the specified number of bits, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
USHLL Vd.4S,Vn.4H,#0
a → Vn.4H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Shift Left Long (immediate). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, shifts the unsigned integer value left by the specified number of bits, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
USHLL Vd.2D,Vn.2S,#0
a → Vn.2S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Shift Left Long (immediate). This instruction reads each vector element from the source SIMD&FP register, left shifts each vector element by the specified shift amount, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SSHLL2 Vd.8H,Vn.16B,#0
a → Vn.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Signed Shift Left Long (immediate). This instruction reads each vector element from the source SIMD&FP register, left shifts each vector element by the specified shift amount, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SSHLL2 Vd.4S,Vn.8H,#0
a → Vn.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Signed Shift Left Long (immediate). This instruction reads each vector element from the source SIMD&FP register, left shifts each vector element by the specified shift amount, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements. All the values in this instruction are signed integer values.
SSHLL2 Vd.2D,Vn.4S,#0
a → Vn.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Unsigned Shift Left Long (immediate). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, shifts the unsigned integer value left by the specified number of bits, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
USHLL2 Vd.8H,Vn.16B,#0
a → Vn.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Unsigned Shift Left Long (immediate). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, shifts the unsigned integer value left by the specified number of bits, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
USHLL2 Vd.4S,Vn.8H,#0
a → Vn.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Unsigned Shift Left Long (immediate). This instruction reads each vector element in the lower or upper half of the source SIMD&FP register, shifts the unsigned integer value left by the specified number of bits, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
USHLL2 Vd.2D,Vn.4S,#0
a → Vn.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = Vpart[n, part]; bits(datasize*2) result; integer element; for e = 0 to elements-1 element = Int(Elem[operand, e, esize], unsigned) << shift; Elem[result, e, 2*esize] = element<2*esize-1:0>; V[d] = result;
A64
Signed saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates the value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. All the values in this instruction are signed integer values.
SQXTN Vd.8B,Vn.8H
a → Vn.8H
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates the value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. All the values in this instruction are signed integer values.
SQXTN Vd.4H,Vn.4S
a → Vn.4S
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates the value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. All the values in this instruction are signed integer values.
SQXTN Vd.2S,Vn.2D
a → Vn.2D
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Unsigned saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates each value to half the original width, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UQXTN Vd.8B,Vn.8H
a → Vn.8H
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Unsigned saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates each value to half the original width, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UQXTN Vd.4H,Vn.4S
a → Vn.4S
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Unsigned saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates each value to half the original width, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UQXTN Vd.2S,Vn.2D
a → Vn.2D
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates the value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. All the values in this instruction are signed integer values.
SQXTN Bd,Hn
a → Hn
Bd → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates the value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. All the values in this instruction are signed integer values.
SQXTN Hd,Sn
a → Sn
Hd → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates the value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. All the values in this instruction are signed integer values.
SQXTN Sd,Dn
a → Dn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates each value to half the original width, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UQXTN Bd,Hn
a → Hn
Bd → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates each value to half the original width, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UQXTN Hd,Sn
a → Sn
Hd → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates each value to half the original width, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UQXTN Sd,Dn
a → Dn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates the value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. All the values in this instruction are signed integer values.
SQXTN2 Vd.16B,Vn.8H
r → Vd.8B
a → Vn.8H
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates the value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. All the values in this instruction are signed integer values.
SQXTN2 Vd.8H,Vn.4S
r → Vd.4H
a → Vn.4S
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates the value to half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements. All the values in this instruction are signed integer values.
SQXTN2 Vd.4S,Vn.2D
r → Vd.2S
a → Vn.2D
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates each value to half the original width, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UQXTN2 Vd.16B,Vn.8H
r → Vd.8B
a → Vn.8H
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates each value to half the original width, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UQXTN2 Vd.8H,Vn.4S
r → Vd.4H
a → Vn.4S
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Unsigned saturating extract Narrow. This instruction reads each vector element from the source SIMD&FP register, saturates each value to half the original width, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UQXTN2 Vd.4S,Vn.2D
r → Vd.2S
a → Vn.2D
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = SatQ(Int(element, unsigned), esize, unsigned); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating extract Unsigned Narrow. This instruction reads each signed integer value in the vector of the source SIMD&FP register, saturates the value to an unsigned integer value that is half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
SQXTUN Vd.8B,Vn.8H
a → Vn.8H
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = UnsignedSatQ(SInt(element), esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating extract Unsigned Narrow. This instruction reads each signed integer value in the vector of the source SIMD&FP register, saturates the value to an unsigned integer value that is half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
SQXTUN Vd.4H,Vn.4S
a → Vn.4S
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = UnsignedSatQ(SInt(element), esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating extract Unsigned Narrow. This instruction reads each signed integer value in the vector of the source SIMD&FP register, saturates the value to an unsigned integer value that is half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
SQXTUN Vd.2S,Vn.2D
a → Vn.2D
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = UnsignedSatQ(SInt(element), esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
v7/A32/A64
Signed saturating extract Unsigned Narrow. This instruction reads each signed integer value in the vector of the source SIMD&FP register, saturates the value to an unsigned integer value that is half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
SQXTUN Bd,Hn
a → Hn
Bd → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = UnsignedSatQ(SInt(element), esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating extract Unsigned Narrow. This instruction reads each signed integer value in the vector of the source SIMD&FP register, saturates the value to an unsigned integer value that is half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
SQXTUN Hd,Sn
a → Sn
Hd → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = UnsignedSatQ(SInt(element), esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating extract Unsigned Narrow. This instruction reads each signed integer value in the vector of the source SIMD&FP register, saturates the value to an unsigned integer value that is half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
SQXTUN Sd,Dn
a → Dn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = UnsignedSatQ(SInt(element), esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating extract Unsigned Narrow. This instruction reads each signed integer value in the vector of the source SIMD&FP register, saturates the value to an unsigned integer value that is half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
SQXTUN2 Vd.16B,Vn.8H
r → Vd.8B
a → Vn.8H
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = UnsignedSatQ(SInt(element), esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating extract Unsigned Narrow. This instruction reads each signed integer value in the vector of the source SIMD&FP register, saturates the value to an unsigned integer value that is half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
SQXTUN2 Vd.8H,Vn.4S
r → Vd.4H
a → Vn.4S
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = UnsignedSatQ(SInt(element), esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Signed saturating extract Unsigned Narrow. This instruction reads each signed integer value in the vector of the source SIMD&FP register, saturates the value to an unsigned integer value that is half the original width, places the result into a vector, and writes the vector to the lower or upper half of the destination SIMD&FP register. The destination vector elements are half as long as the source vector elements.
SQXTUN2 Vd.4S,Vn.2D
r → Vd.2S
a → Vn.2D
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(2*datasize) operand = V[n]; bits(datasize) result; bits(2*esize) element; boolean sat; for e = 0 to elements-1 element = Elem[operand, e, 2*esize]; (Elem[result, e, esize], sat) = UnsignedSatQ(SInt(element), esize); if sat then FPSR.QC = '1'; Vpart[d, part] = result;
A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.4H,Vn.4H,Vm.H[lane]
a → Vd.4H
b → Vn.4H
v → Vm.4H
0 << lane << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.8H,Vn.8H,Vm.H[lane]
a → Vd.8H
b → Vn.8H
v → Vm.4H
0 << lane << 3
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.2S,Vn.2S,Vm.S[lane]
a → Vd.2S
b → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.4S,Vn.4S,Vm.S[lane]
a → Vd.4S
b → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.4H,Vn.4H,Vm.H[lane]
a → Vd.4H
b → Vn.4H
v → Vm.4H
0 << lane << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.8H,Vn.8H,Vm.H[lane]
a → Vd.8H
b → Vn.8H
v → Vm.4H
0 << lane << 3
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.2S,Vn.2S,Vm.S[lane]
a → Vd.2S
b → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.4S,Vn.4S,Vm.S[lane]
a → Vd.4S
b → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
RESULT[I] = a[i] + (b[i] * v[lane]) for i = 0 to 1
0 << lane << 1
N/A → result
v7/A32/A64
RESULT[I] = a[i] + (b[i] * v[lane]) for i = 0 to 3
0 << lane << 1
N/A → result
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.4H,Vn.4H,Vm.H[lane]
a → Vd.4H
b → Vn.4H
v → Vm.8H
0 << lane << 7
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.8H,Vn.8H,Vm.H[lane]
a → Vd.8H
b → Vn.8H
v → Vm.8H
0 << lane << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.2S,Vn.2S,Vm.S[lane]
a → Vd.2S
b → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.4S,Vn.4S,Vm.S[lane]
a → Vd.4S
b → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.4H,Vn.4H,Vm.H[lane]
a → Vd.4H
b → Vn.4H
v → Vm.8H
0 << lane << 7
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.8H,Vn.8H,Vm.H[lane]
a → Vd.8H
b → Vn.8H
v → Vm.8H
0 << lane << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.2S,Vn.2S,Vm.S[lane]
a → Vd.2S
b → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.4S,Vn.4S,Vm.S[lane]
a → Vd.4S
b → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
A64
RESULT[I] = a[i] + (b[i] * v[lane]) for i = 0 to 1
0 << lane << 3
N/A → result
A64
RESULT[I] = a[i] + (b[i] * v[lane]) for i = 0 to 3
0 << lane << 3
N/A → result
A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL Vd.4S,Vn.4H,Vm.H[lane]
a → Vd.4S
b → Vn.4H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL Vd.2D,Vn.2S,Vm.S[lane]
a → Vd.2D
b → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL Vd.4S,Vn.4H,Vm.H[lane]
a → Vd.4S
b → Vn.4H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL Vd.2D,Vn.2S,Vm.S[lane]
a → Vd.2D
b → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vd.4S
b → Vn.8H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vd.2D
b → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vd.4S
b → Vn.8H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vd.2D
b → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL Vd.4S,Vn.4H,Vm.H[lane]
a → Vd.4S
b → Vn.4H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL Vd.2D,Vn.2S,Vm.S[lane]
a → Vd.2D
b → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL Vd.4S,Vn.4H,Vm.H[lane]
a → Vd.4S
b → Vn.4H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL Vd.2D,Vn.2S,Vm.S[lane]
a → Vd.2D
b → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vd.4S
b → Vn.8H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vd.2D
b → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vd.4S
b → Vn.8H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vd.2D
b → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL Vd.4S,Vn.4H,Vm.H[lane]
a → Vd.4S
b → Vn.4H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL Vd.2D,Vn.2S,Vm.S[lane]
a → Vd.2D
b → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL Sd,Hn,Vm.H[lane]
a → Sd
b → Hn
v → Vm.4H
0 << lane << 3
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL Dd,Sn,Vm.S[lane]
a → Dd
b → Sn
v → Vm.2S
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vd.4S
b → Vn.8H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vd.2D
b → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL Vd.4S,Vn.4H,Vm.H[lane]
a → Vd.4S
b → Vn.4H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL Vd.2D,Vn.2S,Vm.S[lane]
a → Vd.2D
b → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL Sd,Hn,Vm.H[lane]
a → Sd
b → Hn
v → Vm.8H
0 << lane << 7
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL Dd,Sn,Vm.S[lane]
a → Dd
b → Sn
v → Vm.4S
0 << lane << 3
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vd.4S
b → Vn.8H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vd.2D
b → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.4H,Vn.4H,Vm.H[lane]
a → Vd.4H
b → Vn.4H
v → Vm.4H
0 << lane << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.8H,Vn.8H,Vm.H[lane]
a → Vd.8H
b → Vn.8H
v → Vm.4H
0 << lane << 3
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.2S,Vn.2S,Vm.S[lane]
a → Vd.2S
b → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.4S,Vn.4S,Vm.S[lane]
a → Vd.4S
b → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.4H,Vn.4H,Vm.H[lane]
a → Vd.4H
b → Vn.4H
v → Vm.4H
0 << lane << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.8H,Vn.8H,Vm.H[lane]
a → Vd.8H
b → Vn.8H
v → Vm.4H
0 << lane << 3
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.2S,Vn.2S,Vm.S[lane]
a → Vd.2S
b → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.4S,Vn.4S,Vm.S[lane]
a → Vd.4S
b → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
RESULT[I] = a[i] - (b[i] * v[lane]) for i = 0 to 1
0 << lane << 1
N/A → result
v7/A32/A64
RESULT[I] = a[i] - (b[i] * v[lane]) for i = 0 to 3
0 << lane << 1
N/A → result
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.4H,Vn.4H,Vm.H[lane]
a → Vd.4H
b → Vn.4H
v → Vm.8H
0 << lane << 7
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.8H,Vn.8H,Vm.H[lane]
a → Vd.8H
b → Vn.8H
v → Vm.8H
0 << lane << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.2S,Vn.2S,Vm.S[lane]
a → Vd.2S
b → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.4S,Vn.4S,Vm.S[lane]
a → Vd.4S
b → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.4H,Vn.4H,Vm.H[lane]
a → Vd.4H
b → Vn.4H
v → Vm.8H
0 << lane << 7
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.8H,Vn.8H,Vm.H[lane]
a → Vd.8H
b → Vn.8H
v → Vm.8H
0 << lane << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.2S,Vn.2S,Vm.S[lane]
a → Vd.2S
b → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.4S,Vn.4S,Vm.S[lane]
a → Vd.4S
b → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
A64
RESULT[I] = a[i] - (b[i] * v[lane]) for i = 0 to 1
0 << lane << 3
N/A → result
A64
RESULT[I] = a[i] - (b[i] * v[lane]) for i = 0 to 3
0 << lane << 3
N/A → result
A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL Vd.4S,Vn.4H,Vm.H[lane]
a → Vd.4S
b → Vn.4H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL Vd.2D,Vn.2S,Vm.S[lane]
a → Vd.2D
b → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL Vd.4S,Vn.4H,Vm.H[lane]
a → Vd.4S
b → Vn.4H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL Vd.2D,Vn.2S,Vm.S[lane]
a → Vd.2D
b → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vd.4S
b → Vn.8H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vd.2D
b → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vd.4S
b → Vn.8H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vd.2D
b → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL Vd.4S,Vn.4H,Vm.H[lane]
a → Vd.4S
b → Vn.4H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL Vd.2D,Vn.2S,Vm.S[lane]
a → Vd.2D
b → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL Vd.4S,Vn.4H,Vm.H[lane]
a → Vd.4S
b → Vn.4H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL Vd.2D,Vn.2S,Vm.S[lane]
a → Vd.2D
b → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vd.4S
b → Vn.8H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vd.2D
b → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vd.4S
b → Vn.8H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vd.2D
b → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL Vd.4S,Vn.4H,Vm.H[lane]
a → Vd.4S
b → Vn.4H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL Vd.2D,Vn.2S,Vm.S[lane]
a → Vd.2D
b → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL Sd,Hn,Vm.H[lane]
a → Sd
b → Hn
v → Vm.4H
0 << lane << 3
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL Dd,Sn,Vm.S[lane]
a → Dd
b → Sn
v → Vm.2S
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vd.4S
b → Vn.8H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vd.2D
b → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL Vd.4S,Vn.4H,Vm.H[lane]
a → Vd.4S
b → Vn.4H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL Vd.2D,Vn.2S,Vm.S[lane]
a → Vd.2D
b → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL Sd,Hn,Vm.H[lane]
a → Sd
b → Hn
v → Vm.8H
0 << lane << 7
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL Dd,Sn,Vm.S[lane]
a → Dd
b → Sn
v → Vm.4S
0 << lane << 3
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vd.4S
b → Vn.8H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vd.2D
b → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.4H,Vn.4H,Vm.H[0]
a → Vn.4H
b → Vm.H[0]
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.8H,Vn.8H,Vm.H[0]
a → Vn.8H
b → Vm.H[0]
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.2S,Vn.2S,Vm.S[0]
a → Vn.2S
b → Vm.S[0]
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.4S,Vn.4S,Vm.S[0]
a → Vn.4S
b → Vm.S[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.4H,Vn.4H,Vm.H[0]
a → Vn.4H
b → Vm.H[0]
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.8H,Vn.8H,Vm.H[0]
a → Vn.8H
b → Vm.H[0]
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.2S,Vn.2S,Vm.S[0]
a → Vn.2S
b → Vm.S[0]
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.4S,Vn.4S,Vm.S[0]
a → Vn.4S
b → Vm.S[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Vd.2S,Vn.2S,Vm.S[0]
a → Vn.2S
b → Vm.S[0]
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
v7/A32/A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Vd.4S,Vn.4S,Vm.S[0]
a → Vn.4S
b → Vm.S[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
v7/A32/A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Dd,Dn,Vm.D[0]
a → Dn
b → Vm.D[0]
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Vd.2D,Vn.2D,Vm.D[0]
a → Vn.2D
b → Vm.D[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.4H,Vn.4H,Vm.H[lane]
a → Vn.4H
v → Vm.4H
0 << lane << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.8H,Vn.8H,Vm.H[lane]
a → Vn.8H
v → Vm.4H
0 << lane << 3
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.2S,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.4S,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.4H,Vn.4H,Vm.H[lane]
a → Vn.4H
v → Vm.4H
0 << lane << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.8H,Vn.8H,Vm.H[lane]
a → Vn.8H
v → Vm.4H
0 << lane << 3
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.2S,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.4S,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
v7/A32/A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Vd.2S,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
v7/A32/A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Vd.4S,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
v7/A32/A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Dd,Dn,Vm.D[lane]
a → Dn
v → Vm.1D
0 << lane << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Vd.2D,Vn.2D,Vm.D[lane]
a → Vn.2D
v → Vm.1D
0 << lane << 0
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Sd,Sn,Vm.S[lane]
a → Sn
v → Vm.2S
0 << lane << 1
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Dd,Dn,Vm.S[lane]
a → Dn
v → Vm.1D
0 << lane << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.4H,Vn.4H,Vm.H[lane]
a → Vn.4H
v → Vm.8H
0 << lane << 7
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.8H,Vn.8H,Vm.H[lane]
a → Vn.8H
v → Vm.8H
0 << lane << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.2S,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.4S,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.4H,Vn.4H,Vm.H[lane]
a → Vn.4H
v → Vm.8H
0 << lane << 7
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.8H,Vn.8H,Vm.H[lane]
a → Vn.8H
v → Vm.8H
0 << lane << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.2S,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
A64
Multiply (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
MUL Vd.4S,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if poly then product = PolynomialMult(element1, element2)<esize-1:0>; else product = (UInt(element1)*UInt(element2))<esize-1:0>; Elem[result, e, esize] = product; V[d] = result;
A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Vd.2S,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Vd.4S,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Dd,Dn,Vm.D[lane]
a → Dn
v → Vm.2D
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Vd.2D,Vn.2D,Vm.D[lane]
a → Vn.2D
v → Vm.2D
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Sd,Sn,Vm.S[lane]
a → Sn
v → Vm.4S
0 << lane << 3
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Floating-point Multiply (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FMUL Dd,Dn,Vm.D[lane]
a → Dn
v → Vm.2D
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPMul(element1, element2, FPCR); V[d] = result;
A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL Vd.4S,Vn.4H,Vm.H[0]
a → Vn.4H
b → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL Vd.2D,Vn.2S,Vm.S[0]
a → Vn.2S
b → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL Vd.4S,Vn.4H,Vm.H[0]
a → Vn.4H
b → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL Vd.2D,Vn.2S,Vm.S[0]
a → Vn.2S
b → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL2 Vd.4S,Vn.8H,Vm.H[0]
a → Vn.8H
b → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL2 Vd.2D,Vn.4S,Vm.S[0]
a → Vn.4S
b → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL2 Vd.4S,Vn.8H,Vm.H[0]
a → Vn.8H
b → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL2 Vd.2D,Vn.4S,Vm.S[0]
a → Vn.4S
b → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL Vd.4S,Vn.4H,Vm.H[lane]
a → Vn.4H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL Vd.2D,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL Vd.4S,Vn.4H,Vm.H[lane]
a → Vn.4H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL Vd.2D,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
v7/A32/A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vn.8H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vn.8H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL Vd.4S,Vn.4H,Vm.H[lane]
a → Vn.4H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL Vd.2D,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL Vd.4S,Vn.4H,Vm.H[lane]
a → Vn.4H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL Vd.2D,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vn.8H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Signed Multiply Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register.
SMULL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vn.8H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Unsigned Multiply long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, places the result in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMULL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); Elem[result, e, 2*esize] = (element1*element2)<2*esize-1:0>; V[d] = result;
A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL Vd.4S,Vn.4H,Vm.H[0]
a → Vn.4H
b → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL Vd.2D,Vn.2S,Vm.S[0]
a → Vn.2S
b → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL2 Vd.4S,Vn.8H,Vm.H[0]
a → Vn.8H
b → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL2 Vd.2D,Vn.4S,Vm.S[0]
a → Vn.4S
b → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL Vd.4S,Vn.4H,Vm.H[lane]
a → Vn.4H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL Vd.2D,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL Sd,Hn,Vm.H[lane]
a → Hn
v → Vm.4H
0 << lane << 3
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL Dd,Sn,Vm.S[lane]
a → Sn
v → Vm.2S
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vn.8H
v → Vm.4H
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL Vd.4S,Vn.4H,Vm.H[lane]
a → Vn.4H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL Vd.2D,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL Sd,Hn,Vm.H[lane]
a → Hn
v → Vm.8H
0 << lane << 7
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL Dd,Sn,Vm.S[lane]
a → Sn
v → Vm.4S
0 << lane << 3
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL2 Vd.4S,Vn.8H,Vm.H[lane]
a → Vn.8H
v → Vm.8H
0 << lane << 7
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply Long. This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, doubles the results, places the final results in a vector, and writes the vector to the destination SIMD&FP register.
SQDMULL2 Vd.2D,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat) = SignedSatQ(2 * element1 * element2, 2 * esize); Elem[result, e, 2*esize] = product; if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Vd.4H,Vn.4H,Vm.H[0]
a → Vn.4H
b → Vm.H[0]
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Vd.8H,Vn.8H,Vm.H[0]
a → Vn.8H
b → Vm.H[0]
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Vd.2S,Vn.2S,Vm.S[0]
a → Vn.2S
b → Vm.S[0]
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Vd.4S,Vn.4S,Vm.S[0]
a → Vn.4S
b → Vm.S[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Vd.4H,Vn.4H,Vm.H[lane]
a → Vn.4H
v → Vm.4H
0 << lane << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Vd.8H,Vn.8H,Vm.H[lane]
a → Vn.8H
v → Vm.4H
0 << lane << 3
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Vd.2S,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Vd.4S,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Hd,Hn,Vm.H[lane]
a → Hn
v → Vm.4H
0 << lane << 3
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Sd,Sn,Vm.H[lane]
a → Sn
v → Vm.2S
0 << lane << 1
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Vd.4H,Vn.4H,Vm.H[lane]
a → Vn.4H
v → Vm.8H
0 << lane << 7
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Vd.8H,Vn.8H,Vm.H[lane]
a → Vn.8H
v → Vm.8H
0 << lane << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Vd.2S,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Vd.4S,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Hd,Hn,Vm.H[lane]
a → Hn
v → Vm.8H
0 << lane << 7
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQDMULH Sd,Sn,Vm.H[lane]
a → Sn
v → Vm.4S
0 << lane << 3
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Vd.4H,Vn.4H,Vm.H[0]
a → Vn.4H
b → Vm.H[0]
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Vd.8H,Vn.8H,Vm.H[0]
a → Vn.8H
b → Vm.H[0]
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Vd.2S,Vn.2S,Vm.S[0]
a → Vn.2S
b → Vm.S[0]
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Vd.4S,Vn.4S,Vm.S[0]
a → Vn.4S
b → Vm.S[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Vd.4H,Vn.4H,Vm.H[lane]
a → Vn.4H
v → Vm.4H
0 << lane << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Vd.8H,Vn.8H,Vm.H[lane]
a → Vn.8H
v → Vm.4H
0 << lane << 3
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Vd.2S,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Vd.4S,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.2S
0 << lane << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Hd,Hn,Vm.H[lane]
a → Hn
v → Vm.4H
0 << lane << 3
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Sd,Sn,Vm.S[lane]
a → Sn
v → Vm.2S
0 << lane << 1
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Vd.4H,Vn.4H,Vm.H[lane]
a → Vn.4H
v → Vm.8H
0 << lane << 7
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Vd.8H,Vn.8H,Vm.H[lane]
a → Vn.8H
v → Vm.8H
0 << lane << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Vd.2S,Vn.2S,Vm.S[lane]
a → Vn.2S
v → Vm.4S
0 << lane << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Vd.4S,Vn.4S,Vm.S[lane]
a → Vn.4S
v → Vm.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Hd,Hn,Vm.H[lane]
a → Hn
v → Vm.8H
0 << lane << 7
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Rounding Doubling Multiply returning High half. This instruction multiplies the values of corresponding elements of the two source SIMD&FP registers, doubles the results, places the most significant half of the final results into a vector, and writes the vector to the destination SIMD&FP register.
SQRDMULH Sd,Sn,Vm.S[lane]
a → Sn
v → Vm.4S
0 << lane << 3
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer round_const = if rounding then 1 << (esize - 1) else 0; integer element1; integer element2; integer product; boolean sat; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); product = (2 * element1 * element2) + round_const; (Elem[result, e, esize], sat) = SignedSatQ(product >> esize, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.4H,Vn.4H,Vm.H[0]
a → Vd.4H
b → Vn.4H
c → Vm.H[0]
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.8H,Vn.8H,Vm.H[0]
a → Vd.8H
b → Vn.8H
c → Vm.H[0]
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.2S,Vn.2S,Vm.S[0]
a → Vd.2S
b → Vn.2S
c → Vm.S[0]
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.4S,Vn.4S,Vm.S[0]
a → Vd.4S
b → Vn.4S
c → Vm.S[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.4H,Vn.4H,Vm.H[0]
a → Vd.4H
b → Vn.4H
c → Vm.H[0]
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.8H,Vn.8H,Vm.H[0]
a → Vd.8H
b → Vn.8H
c → Vm.H[0]
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.2S,Vn.2S,Vm.S[0]
a → Vd.2S
b → Vn.2S
c → Vm.S[0]
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Add to accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register.
MLA Vd.4S,Vn.4S,Vm.S[0]
a → Vd.4S
b → Vn.4S
c → Vm.S[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
RESULT[I] = a[i] + (b[i] * c) for i = 0 to 1
a → N/A
b → N/A
c → N/A
N/A → result
v7/A32/A64
RESULT[I] = a[i] + (b[i] * c) for i = 0 to 3
a → N/A
b → N/A
c → N/A
N/A → result
v7/A32/A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL Vd.4S,Vn.4H,Vm.H[0]
a → Vd.4S
b → Vn.4H
c → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL Vd.2D,Vn.2S,Vm.S[0]
a → Vd.2D
b → Vn.2S
c → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL Vd.4S,Vn.4H,Vm.H[0]
a → Vd.4S
b → Vn.4H
c → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL Vd.2D,Vn.2S,Vm.S[0]
a → Vd.2D
b → Vn.2S
c → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL2 Vd.4S,Vn.8H,Vm.H[0]
a → Vd.4S
b → Vn.8H
c → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed Multiply-Add Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLAL2 Vd.2D,Vn.4S,Vm.S[0]
a → Vd.2D
b → Vn.4S
c → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL2 Vd.4S,Vn.8H,Vm.H[0]
a → Vd.4S
b → Vn.8H
c → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Add Long (vector). This instruction multiplies the vector elements in the lower or upper half of the first source SIMD&FP register by the corresponding vector elements of the second source SIMD&FP register, and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
UMLAL2 Vd.2D,Vn.4S,Vm.S[0]
a → Vd.2D
b → Vn.4S
c → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL Vd.4S,Vn.4H,Vm.H[0]
a → Vd.4S
b → Vn.4H
c → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL Vd.2D,Vn.2S,Vm.S[0]
a → Vd.2D
b → Vn.2S
c → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL2 Vd.4S,Vn.8H,Vm.H[0]
a → Vd.4S
b → Vn.8H
c → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Add Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and accumulates the final results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLAL2 Vd.2D,Vn.4S,Vm.S[0]
a → Vd.2D
b → Vn.4S
c → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.4H,Vn.4H,Vm.H[0]
a → Vd.4H
b → Vn.4H
c → Vm.H[0]
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.8H,Vn.8H,Vm.H[0]
a → Vd.8H
b → Vn.8H
c → Vm.H[0]
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.2S,Vn.2S,Vm.S[0]
a → Vd.2S
b → Vn.2S
c → Vm.S[0]
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.4S,Vn.4S,Vm.S[0]
a → Vd.4S
b → Vn.4S
c → Vm.S[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.4H,Vn.4H,Vm.H[0]
a → Vd.4H
b → Vn.4H
c → Vm.H[0]
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.8H,Vn.8H,Vm.H[0]
a → Vd.8H
b → Vn.8H
c → Vm.H[0]
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.2S,Vn.2S,Vm.S[0]
a → Vd.2S
b → Vn.2S
c → Vm.S[0]
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding elements in the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register.
MLS Vd.4S,Vn.4S,Vm.S[0]
a → Vd.4S
b → Vn.4S
c → Vm.S[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; bits(esize) product; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; product = (UInt(element1)*UInt(element2))<esize-1:0>; if sub_op then Elem[result, e, esize] = Elem[operand3, e, esize] - product; else Elem[result, e, esize] = Elem[operand3, e, esize] + product; V[d] = result;
v7/A32/A64
RESULT[I] = a[i] - (b[i] * c) for i = 0 to 1
a → N/A
b → N/A
c → N/A
N/A → result
v7/A32/A64
RESULT[I] = a[i] - (b[i] * c) for i = 0 to 3
a → N/A
b → N/A
c → N/A
N/A → result
v7/A32/A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL Vd.4S,Vn.4H,Vm.H[0]
a → Vd.4S
b → Vn.4H
c → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL Vd.2D,Vn.2S,Vm.S[0]
a → Vd.2D
b → Vn.2S
c → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL Vd.4S,Vn.4H,Vm.H[0]
a → Vd.4S
b → Vn.4H
c → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL Vd.2D,Vn.2S,Vm.S[0]
a → Vd.2D
b → Vn.2S
c → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
v7/A32/A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL2 Vd.4S,Vn.8H,Vm.H[0]
a → Vd.4S
b → Vn.8H
c → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed Multiply-Subtract Long (vector). This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SMLSL2 Vd.2D,Vn.4S,Vm.S[0]
a → Vd.2D
b → Vn.4S
c → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL2 Vd.4S,Vn.8H,Vm.H[0]
a → Vd.4S
b → Vn.8H
c → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
UMLSL2 Vd.2D,Vn.4S,Vm.S[0]
a → Vd.2D
b → Vn.4S
c → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; bits(2*esize) accum; for e = 0 to elements-1 element1 = Int(Elem[operand1, e, esize], unsigned); element2 = Int(Elem[operand2, e, esize], unsigned); product = (element1*element2)<2*esize-1:0>; if sub_op then accum = Elem[operand3, e, 2*esize] - product; else accum = Elem[operand3, e, 2*esize] + product; Elem[result, e, 2*esize] = accum; V[d] = result;
A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL Vd.4S,Vn.4H,Vm.H[0]
a → Vd.4S
b → Vn.4H
c → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL Vd.2D,Vn.2S,Vm.S[0]
a → Vd.2D
b → Vn.2S
c → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL2 Vd.4S,Vn.8H,Vm.H[0]
a → Vd.4S
b → Vn.8H
c → Vm.H[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Doubling Multiply-Subtract Long. This instruction multiplies corresponding signed integer values in the lower or upper half of the vectors of the two source SIMD&FP registers, doubles the results, and subtracts the final results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
SQDMLSL2 Vd.2D,Vn.4S,Vm.S[0]
a → Vd.2D
b → Vn.4S
c → Vm.S[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) operand3 = V[d]; bits(2*datasize) result; integer element1; integer element2; bits(2*esize) product; integer accum; boolean sat1; boolean sat2; for e = 0 to elements-1 element1 = SInt(Elem[operand1, e, esize]); element2 = SInt(Elem[operand2, e, esize]); (product, sat1) = SignedSatQ(2 * element1 * element2, 2 * esize); if sub_op then accum = SInt(Elem[operand3, e, 2*esize]) - SInt(product); else accum = SInt(Elem[operand3, e, 2*esize]) + SInt(product); (Elem[result, e, 2*esize], sat2) = SignedSatQ(accum, 2 * esize); if sat1 || sat2 then FPSR.QC = '1'; V[d] = result;
A64
Absolute value (vector). This instruction calculates the absolute value of each vector element in the source SIMD&FP register, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
ABS Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Absolute value (vector). This instruction calculates the absolute value of each vector element in the source SIMD&FP register, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
ABS Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Absolute value (vector). This instruction calculates the absolute value of each vector element in the source SIMD&FP register, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
ABS Vd.4H,Vn.4H
a → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Absolute value (vector). This instruction calculates the absolute value of each vector element in the source SIMD&FP register, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
ABS Vd.8H,Vn.8H
a → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Absolute value (vector). This instruction calculates the absolute value of each vector element in the source SIMD&FP register, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
ABS Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Absolute value (vector). This instruction calculates the absolute value of each vector element in the source SIMD&FP register, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
ABS Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Floating-point Absolute value (vector). This instruction calculates the absolute value of each vector element in the source SIMD&FP register, writes the result to a vector, and writes the vector to the destination SIMD&FP register.
FABS Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; if neg then element = FPNeg(element); else element = FPAbs(element); Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Floating-point Absolute value (vector). This instruction calculates the absolute value of each vector element in the source SIMD&FP register, writes the result to a vector, and writes the vector to the destination SIMD&FP register.
FABS Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; if neg then element = FPNeg(element); else element = FPAbs(element); Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Absolute value (vector). This instruction calculates the absolute value of each vector element in the source SIMD&FP register, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
ABS Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Absolute value (vector). This instruction calculates the absolute value of each vector element in the source SIMD&FP register, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
ABS Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Absolute value (vector). This instruction calculates the absolute value of each vector element in the source SIMD&FP register, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
ABS Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Floating-point Absolute value (vector). This instruction calculates the absolute value of each vector element in the source SIMD&FP register, writes the result to a vector, and writes the vector to the destination SIMD&FP register.
FABS Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; if neg then element = FPNeg(element); else element = FPAbs(element); Elem[result, e, esize] = element; V[d] = result;
A64
Floating-point Absolute value (vector). This instruction calculates the absolute value of each vector element in the source SIMD&FP register, writes the result to a vector, and writes the vector to the destination SIMD&FP register.
FABS Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; if neg then element = FPNeg(element); else element = FPAbs(element); Elem[result, e, esize] = element; V[d] = result;
A64
Signed saturating Absolute value. This instruction reads each vector element from the source SIMD&FP register, puts the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQABS Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Absolute value. This instruction reads each vector element from the source SIMD&FP register, puts the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQABS Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Absolute value. This instruction reads each vector element from the source SIMD&FP register, puts the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQABS Vd.4H,Vn.4H
a → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Absolute value. This instruction reads each vector element from the source SIMD&FP register, puts the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQABS Vd.8H,Vn.8H
a → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Absolute value. This instruction reads each vector element from the source SIMD&FP register, puts the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQABS Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Absolute value. This instruction reads each vector element from the source SIMD&FP register, puts the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQABS Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Absolute value. This instruction reads each vector element from the source SIMD&FP register, puts the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQABS Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Absolute value. This instruction reads each vector element from the source SIMD&FP register, puts the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQABS Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Absolute value. This instruction reads each vector element from the source SIMD&FP register, puts the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQABS Bd,Bn
a → Bn
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Absolute value. This instruction reads each vector element from the source SIMD&FP register, puts the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQABS Hd,Hn
a → Hn
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Absolute value. This instruction reads each vector element from the source SIMD&FP register, puts the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQABS Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Absolute value. This instruction reads each vector element from the source SIMD&FP register, puts the absolute value of the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQABS Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Negate (vector). This instruction reads each vector element from the source SIMD&FP register, negates each value, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
NEG Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Negate (vector). This instruction reads each vector element from the source SIMD&FP register, negates each value, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
NEG Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Negate (vector). This instruction reads each vector element from the source SIMD&FP register, negates each value, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
NEG Vd.4H,Vn.4H
a → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Negate (vector). This instruction reads each vector element from the source SIMD&FP register, negates each value, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
NEG Vd.8H,Vn.8H
a → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Negate (vector). This instruction reads each vector element from the source SIMD&FP register, negates each value, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
NEG Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Negate (vector). This instruction reads each vector element from the source SIMD&FP register, negates each value, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
NEG Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
v7/A32/A64
Floating-point Negate (vector). This instruction negates the value of each vector element in the source SIMD&FP register, writes the result to a vector, and writes the vector to the destination SIMD&FP register.
FNEG Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; if neg then element = FPNeg(element); else element = FPAbs(element); Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Floating-point Negate (vector). This instruction negates the value of each vector element in the source SIMD&FP register, writes the result to a vector, and writes the vector to the destination SIMD&FP register.
FNEG Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; if neg then element = FPNeg(element); else element = FPAbs(element); Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Negate (vector). This instruction reads each vector element from the source SIMD&FP register, negates each value, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
NEG Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Negate (vector). This instruction reads each vector element from the source SIMD&FP register, negates each value, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
NEG Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Negate (vector). This instruction reads each vector element from the source SIMD&FP register, negates each value, puts the result into a vector, and writes the vector to the destination SIMD&FP register.
NEG Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); Elem[result, e, esize] = element<esize-1:0>; V[d] = result;
A64
Floating-point Negate (vector). This instruction negates the value of each vector element in the source SIMD&FP register, writes the result to a vector, and writes the vector to the destination SIMD&FP register.
FNEG Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; if neg then element = FPNeg(element); else element = FPAbs(element); Elem[result, e, esize] = element; V[d] = result;
A64
Floating-point Negate (vector). This instruction negates the value of each vector element in the source SIMD&FP register, writes the result to a vector, and writes the vector to the destination SIMD&FP register.
FNEG Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; if neg then element = FPNeg(element); else element = FPAbs(element); Elem[result, e, esize] = element; V[d] = result;
A64
Signed saturating Negate. This instruction reads each vector element from the source SIMD&FP register, negates each value, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQNEG Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Negate. This instruction reads each vector element from the source SIMD&FP register, negates each value, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQNEG Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Negate. This instruction reads each vector element from the source SIMD&FP register, negates each value, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQNEG Vd.4H,Vn.4H
a → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Negate. This instruction reads each vector element from the source SIMD&FP register, negates each value, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQNEG Vd.8H,Vn.8H
a → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Negate. This instruction reads each vector element from the source SIMD&FP register, negates each value, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQNEG Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Negate. This instruction reads each vector element from the source SIMD&FP register, negates each value, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQNEG Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
v7/A32/A64
Signed saturating Negate. This instruction reads each vector element from the source SIMD&FP register, negates each value, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQNEG Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Negate. This instruction reads each vector element from the source SIMD&FP register, negates each value, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQNEG Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Negate. This instruction reads each vector element from the source SIMD&FP register, negates each value, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQNEG Bd,Bn
a → Bn
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Negate. This instruction reads each vector element from the source SIMD&FP register, negates each value, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQNEG Hd,Hn
a → Hn
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Negate. This instruction reads each vector element from the source SIMD&FP register, negates each value, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQNEG Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Signed saturating Negate. This instruction reads each vector element from the source SIMD&FP register, negates each value, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SQNEG Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element; boolean sat; for e = 0 to elements-1 element = SInt(Elem[operand, e, esize]); if neg then element = -element; else element = Abs(element); (Elem[result, e, esize], sat) = SignedSatQ(element, esize); if sat then FPSR.QC = '1'; V[d] = result;
A64
Count Leading Sign bits (vector). This instruction counts the number of consecutive bits following the most significant bit that are the same as the most significant bit in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The count does not include the most significant bit itself.
CLS Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Count Leading Sign bits (vector). This instruction counts the number of consecutive bits following the most significant bit that are the same as the most significant bit in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The count does not include the most significant bit itself.
CLS Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Count Leading Sign bits (vector). This instruction counts the number of consecutive bits following the most significant bit that are the same as the most significant bit in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The count does not include the most significant bit itself.
CLS Vd.4H,Vn.4H
a → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Count Leading Sign bits (vector). This instruction counts the number of consecutive bits following the most significant bit that are the same as the most significant bit in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The count does not include the most significant bit itself.
CLS Vd.8H,Vn.8H
a → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Count Leading Sign bits (vector). This instruction counts the number of consecutive bits following the most significant bit that are the same as the most significant bit in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The count does not include the most significant bit itself.
CLS Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Count Leading Sign bits (vector). This instruction counts the number of consecutive bits following the most significant bit that are the same as the most significant bit in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The count does not include the most significant bit itself.
CLS Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Count Leading Zero bits (vector). This instruction counts the number of consecutive zeros, starting from the most significant bit, in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CLZ Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Count Leading Zero bits (vector). This instruction counts the number of consecutive zeros, starting from the most significant bit, in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CLZ Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Count Leading Zero bits (vector). This instruction counts the number of consecutive zeros, starting from the most significant bit, in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CLZ Vd.4H,Vn.4H
a → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Count Leading Zero bits (vector). This instruction counts the number of consecutive zeros, starting from the most significant bit, in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CLZ Vd.8H,Vn.8H
a → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Count Leading Zero bits (vector). This instruction counts the number of consecutive zeros, starting from the most significant bit, in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CLZ Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Count Leading Zero bits (vector). This instruction counts the number of consecutive zeros, starting from the most significant bit, in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CLZ Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Count Leading Zero bits (vector). This instruction counts the number of consecutive zeros, starting from the most significant bit, in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CLZ Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Count Leading Zero bits (vector). This instruction counts the number of consecutive zeros, starting from the most significant bit, in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CLZ Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Count Leading Zero bits (vector). This instruction counts the number of consecutive zeros, starting from the most significant bit, in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CLZ Vd.4H,Vn.4H
a → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Count Leading Zero bits (vector). This instruction counts the number of consecutive zeros, starting from the most significant bit, in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CLZ Vd.8H,Vn.8H
a → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Count Leading Zero bits (vector). This instruction counts the number of consecutive zeros, starting from the most significant bit, in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CLZ Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Count Leading Zero bits (vector). This instruction counts the number of consecutive zeros, starting from the most significant bit, in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CLZ Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 if countop == CountOp_CLS then count = CountLeadingSignBits(Elem[operand, e, esize]); else count = CountLeadingZeroBits(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Population Count per byte. This instruction counts the number of bits that have a value of one in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CNT Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 count = BitCount(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Population Count per byte. This instruction counts the number of bits that have a value of one in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CNT Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 count = BitCount(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Population Count per byte. This instruction counts the number of bits that have a value of one in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CNT Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 count = BitCount(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Population Count per byte. This instruction counts the number of bits that have a value of one in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CNT Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 count = BitCount(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Population Count per byte. This instruction counts the number of bits that have a value of one in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CNT Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 count = BitCount(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Population Count per byte. This instruction counts the number of bits that have a value of one in each vector element in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register.
CNT Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer count; for e = 0 to elements-1 count = BitCount(Elem[operand, e, esize]); Elem[result, e, esize] = count<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Reciprocal Estimate. This instruction reads each vector element from the source SIMD&FP register, calculates an approximate inverse for the unsigned integer value, places the result into a vector, and writes the vector to the destination SIMD&FP register.
URECPE Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(32) element; for e = 0 to elements-1 element = Elem[operand, e, 32]; Elem[result, e, 32] = UnsignedRecipEstimate(element); V[d] = result;
v7/A32/A64
Unsigned Reciprocal Estimate. This instruction reads each vector element from the source SIMD&FP register, calculates an approximate inverse for the unsigned integer value, places the result into a vector, and writes the vector to the destination SIMD&FP register.
URECPE Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(32) element; for e = 0 to elements-1 element = Elem[operand, e, 32]; Elem[result, e, 32] = UnsignedRecipEstimate(element); V[d] = result;
v7/A32/A64
Floating-point Reciprocal Estimate. This instruction finds an approximate reciprocal estimate for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FRECPE Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRecipEstimate(element, FPCR); V[d] = result;
v7/A32/A64
Floating-point Reciprocal Estimate. This instruction finds an approximate reciprocal estimate for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FRECPE Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRecipEstimate(element, FPCR); V[d] = result;
v7/A32/A64
Floating-point Reciprocal Estimate. This instruction finds an approximate reciprocal estimate for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FRECPE Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRecipEstimate(element, FPCR); V[d] = result;
A64
Floating-point Reciprocal Estimate. This instruction finds an approximate reciprocal estimate for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FRECPE Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRecipEstimate(element, FPCR); V[d] = result;
A64
Floating-point Reciprocal Estimate. This instruction finds an approximate reciprocal estimate for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FRECPE Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRecipEstimate(element, FPCR); V[d] = result;
A64
Floating-point Reciprocal Estimate. This instruction finds an approximate reciprocal estimate for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FRECPE Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRecipEstimate(element, FPCR); V[d] = result;
A64
Floating-point Reciprocal Step. This instruction multiplies the corresponding floating-point values in the vectors of the two source SIMD&FP registers, subtracts each of the products from 2.0, places the resulting floating-point values in a vector, and writes the vector to the destination SIMD&FP register.
FRECPS Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPRecipStepFused(element1, element2); V[d] = result;
v7/A32/A64
Floating-point Reciprocal Step. This instruction multiplies the corresponding floating-point values in the vectors of the two source SIMD&FP registers, subtracts each of the products from 2.0, places the resulting floating-point values in a vector, and writes the vector to the destination SIMD&FP register.
FRECPS Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPRecipStepFused(element1, element2); V[d] = result;
v7/A32/A64
Floating-point Reciprocal Step. This instruction multiplies the corresponding floating-point values in the vectors of the two source SIMD&FP registers, subtracts each of the products from 2.0, places the resulting floating-point values in a vector, and writes the vector to the destination SIMD&FP register.
FRECPS Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPRecipStepFused(element1, element2); V[d] = result;
A64
Floating-point Reciprocal Step. This instruction multiplies the corresponding floating-point values in the vectors of the two source SIMD&FP registers, subtracts each of the products from 2.0, places the resulting floating-point values in a vector, and writes the vector to the destination SIMD&FP register.
FRECPS Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPRecipStepFused(element1, element2); V[d] = result;
A64
Floating-point Reciprocal Step. This instruction multiplies the corresponding floating-point values in the vectors of the two source SIMD&FP registers, subtracts each of the products from 2.0, places the resulting floating-point values in a vector, and writes the vector to the destination SIMD&FP register.
FRECPS Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPRecipStepFused(element1, element2); V[d] = result;
A64
Floating-point Reciprocal Step. This instruction multiplies the corresponding floating-point values in the vectors of the two source SIMD&FP registers, subtracts each of the products from 2.0, places the resulting floating-point values in a vector, and writes the vector to the destination SIMD&FP register.
FRECPS Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPRecipStepFused(element1, element2); V[d] = result;
A64
Floating-point Square Root (vector). This instruction calculates the square root for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FSQRT Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPSqrt(element, FPCR); V[d] = result;
A64
Floating-point Square Root (vector). This instruction calculates the square root for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FSQRT Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPSqrt(element, FPCR); V[d] = result;
A64
Floating-point Square Root (vector). This instruction calculates the square root for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FSQRT Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPSqrt(element, FPCR); V[d] = result;
A64
Floating-point Square Root (vector). This instruction calculates the square root for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FSQRT Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPSqrt(element, FPCR); V[d] = result;
A64
Unsigned Reciprocal Square Root Estimate. This instruction reads each vector element from the source SIMD&FP register, calculates an approximate inverse square root for each value, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
URSQRTE Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(32) element; for e = 0 to elements-1 element = Elem[operand, e, 32]; Elem[result, e, 32] = UnsignedRSqrtEstimate(element); V[d] = result;
v7/A32/A64
Unsigned Reciprocal Square Root Estimate. This instruction reads each vector element from the source SIMD&FP register, calculates an approximate inverse square root for each value, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
URSQRTE Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(32) element; for e = 0 to elements-1 element = Elem[operand, e, 32]; Elem[result, e, 32] = UnsignedRSqrtEstimate(element); V[d] = result;
v7/A32/A64
Floating-point Reciprocal Square Root Estimate. This instruction calculates an approximate square root for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FRSQRTE Vd.2S,Vn.2S
a → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRSqrtEstimate(element, FPCR); V[d] = result;
v7/A32/A64
Floating-point Reciprocal Square Root Estimate. This instruction calculates an approximate square root for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FRSQRTE Vd.4S,Vn.4S
a → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRSqrtEstimate(element, FPCR); V[d] = result;
v7/A32/A64
Floating-point Reciprocal Square Root Estimate. This instruction calculates an approximate square root for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FRSQRTE Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRSqrtEstimate(element, FPCR); V[d] = result;
A64
Floating-point Reciprocal Square Root Estimate. This instruction calculates an approximate square root for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FRSQRTE Vd.2D,Vn.2D
a → Vn.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRSqrtEstimate(element, FPCR); V[d] = result;
A64
Floating-point Reciprocal Square Root Estimate. This instruction calculates an approximate square root for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FRSQRTE Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRSqrtEstimate(element, FPCR); V[d] = result;
A64
Floating-point Reciprocal Square Root Estimate. This instruction calculates an approximate square root for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FRSQRTE Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRSqrtEstimate(element, FPCR); V[d] = result;
A64
Floating-point Reciprocal Square Root Step. This instruction multiplies corresponding floating-point values in the vectors of the two source SIMD&FP registers, subtracts each of the products from 3.0, divides these results by 2.0, places the results into a vector, and writes the vector to the destination SIMD&FP register.
FRSQRTS Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPRSqrtStepFused(element1, element2); V[d] = result;
v7/A32/A64
Floating-point Reciprocal Square Root Step. This instruction multiplies corresponding floating-point values in the vectors of the two source SIMD&FP registers, subtracts each of the products from 3.0, divides these results by 2.0, places the results into a vector, and writes the vector to the destination SIMD&FP register.
FRSQRTS Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPRSqrtStepFused(element1, element2); V[d] = result;
v7/A32/A64
Floating-point Reciprocal Square Root Step. This instruction multiplies corresponding floating-point values in the vectors of the two source SIMD&FP registers, subtracts each of the products from 3.0, divides these results by 2.0, places the results into a vector, and writes the vector to the destination SIMD&FP register.
FRSQRTS Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPRSqrtStepFused(element1, element2); V[d] = result;
A64
Floating-point Reciprocal Square Root Step. This instruction multiplies corresponding floating-point values in the vectors of the two source SIMD&FP registers, subtracts each of the products from 3.0, divides these results by 2.0, places the results into a vector, and writes the vector to the destination SIMD&FP register.
FRSQRTS Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPRSqrtStepFused(element1, element2); V[d] = result;
A64
Floating-point Reciprocal Square Root Step. This instruction multiplies corresponding floating-point values in the vectors of the two source SIMD&FP registers, subtracts each of the products from 3.0, divides these results by 2.0, places the results into a vector, and writes the vector to the destination SIMD&FP register.
FRSQRTS Sd,Sn,Sm
a → Sn
b → Sm
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPRSqrtStepFused(element1, element2); V[d] = result;
A64
Floating-point Reciprocal Square Root Step. This instruction multiplies corresponding floating-point values in the vectors of the two source SIMD&FP registers, subtracts each of the products from 3.0, divides these results by 2.0, places the results into a vector, and writes the vector to the destination SIMD&FP register.
FRSQRTS Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPRSqrtStepFused(element1, element2); V[d] = result;
A64
Bitwise NOT (vector). This instruction reads each vector element from the source SIMD&FP register, places the inverse of each value into a vector, and writes the vector to the destination SIMD&FP register.
MVN Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
The description of NOT gives the operational pseudocode for this instruction.
v7/A32/A64
Bitwise NOT (vector). This instruction reads each vector element from the source SIMD&FP register, places the inverse of each value into a vector, and writes the vector to the destination SIMD&FP register.
MVN Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
The description of NOT gives the operational pseudocode for this instruction.
v7/A32/A64
Bitwise NOT (vector). This instruction reads each vector element from the source SIMD&FP register, places the inverse of each value into a vector, and writes the vector to the destination SIMD&FP register.
MVN Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
The description of NOT gives the operational pseudocode for this instruction.
v7/A32/A64
Bitwise NOT (vector). This instruction reads each vector element from the source SIMD&FP register, places the inverse of each value into a vector, and writes the vector to the destination SIMD&FP register.
MVN Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
The description of NOT gives the operational pseudocode for this instruction.
v7/A32/A64
Bitwise NOT (vector). This instruction reads each vector element from the source SIMD&FP register, places the inverse of each value into a vector, and writes the vector to the destination SIMD&FP register.
MVN Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
The description of NOT gives the operational pseudocode for this instruction.
v7/A32/A64
Bitwise NOT (vector). This instruction reads each vector element from the source SIMD&FP register, places the inverse of each value into a vector, and writes the vector to the destination SIMD&FP register.
MVN Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
The description of NOT gives the operational pseudocode for this instruction.
v7/A32/A64
Bitwise NOT (vector). This instruction reads each vector element from the source SIMD&FP register, places the inverse of each value into a vector, and writes the vector to the destination SIMD&FP register.
MVN Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
The description of NOT gives the operational pseudocode for this instruction.
v7/A32/A64
Bitwise NOT (vector). This instruction reads each vector element from the source SIMD&FP register, places the inverse of each value into a vector, and writes the vector to the destination SIMD&FP register.
MVN Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
The description of NOT gives the operational pseudocode for this instruction.
v7/A32/A64
Bitwise NOT (vector). This instruction reads each vector element from the source SIMD&FP register, places the inverse of each value into a vector, and writes the vector to the destination SIMD&FP register.
MVN Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
The description of NOT gives the operational pseudocode for this instruction.
v7/A32/A64
Bitwise NOT (vector). This instruction reads each vector element from the source SIMD&FP register, places the inverse of each value into a vector, and writes the vector to the destination SIMD&FP register.
MVN Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
The description of NOT gives the operational pseudocode for this instruction.
v7/A32/A64
Bitwise NOT (vector). This instruction reads each vector element from the source SIMD&FP register, places the inverse of each value into a vector, and writes the vector to the destination SIMD&FP register.
MVN Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
The description of NOT gives the operational pseudocode for this instruction.
v7/A32/A64
Bitwise NOT (vector). This instruction reads each vector element from the source SIMD&FP register, places the inverse of each value into a vector, and writes the vector to the destination SIMD&FP register.
MVN Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
The description of NOT gives the operational pseudocode for this instruction.
v7/A32/A64
Bitwise NOT (vector). This instruction reads each vector element from the source SIMD&FP register, places the inverse of each value into a vector, and writes the vector to the destination SIMD&FP register.
MVN Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
The description of NOT gives the operational pseudocode for this instruction.
v7/A32/A64
Bitwise NOT (vector). This instruction reads each vector element from the source SIMD&FP register, places the inverse of each value into a vector, and writes the vector to the destination SIMD&FP register.
MVN Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
The description of NOT gives the operational pseudocode for this instruction.
v7/A32/A64
Bitwise AND (vector). This instruction performs a bitwise AND between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
AND Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise AND (vector). This instruction performs a bitwise AND between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
AND Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise AND (vector). This instruction performs a bitwise AND between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
AND Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise AND (vector). This instruction performs a bitwise AND between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
AND Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise AND (vector). This instruction performs a bitwise AND between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
AND Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise AND (vector). This instruction performs a bitwise AND between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
AND Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise AND (vector). This instruction performs a bitwise AND between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
AND Dd,Dn,Dm
a → Dn
b → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise AND (vector). This instruction performs a bitwise AND between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
AND Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise AND (vector). This instruction performs a bitwise AND between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
AND Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise AND (vector). This instruction performs a bitwise AND between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
AND Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise AND (vector). This instruction performs a bitwise AND between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
AND Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise AND (vector). This instruction performs a bitwise AND between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
AND Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise AND (vector). This instruction performs a bitwise AND between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
AND Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise AND (vector). This instruction performs a bitwise AND between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
AND Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise AND (vector). This instruction performs a bitwise AND between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
AND Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise AND (vector). This instruction performs a bitwise AND between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
AND Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR (vector, register). This instruction performs a bitwise OR between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORR Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR (vector, register). This instruction performs a bitwise OR between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORR Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR (vector, register). This instruction performs a bitwise OR between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORR Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR (vector, register). This instruction performs a bitwise OR between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORR Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR (vector, register). This instruction performs a bitwise OR between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORR Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR (vector, register). This instruction performs a bitwise OR between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORR Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR (vector, register). This instruction performs a bitwise OR between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORR Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR (vector, register). This instruction performs a bitwise OR between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORR Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR (vector, register). This instruction performs a bitwise OR between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORR Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR (vector, register). This instruction performs a bitwise OR between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORR Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR (vector, register). This instruction performs a bitwise OR between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORR Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR (vector, register). This instruction performs a bitwise OR between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORR Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR (vector, register). This instruction performs a bitwise OR between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORR Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR (vector, register). This instruction performs a bitwise OR between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORR Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR (vector, register). This instruction performs a bitwise OR between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORR Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR (vector, register). This instruction performs a bitwise OR between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORR Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise Exclusive OR (vector). This instruction performs a bitwise Exclusive OR operation between the two source SIMD&FP registers, and places the result in the destination SIMD&FP register.
EOR Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand2; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand2 = Zeros(); operand3 = Ones(); V[d] = operand1 EOR ((operand2 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Exclusive OR (vector). This instruction performs a bitwise Exclusive OR operation between the two source SIMD&FP registers, and places the result in the destination SIMD&FP register.
EOR Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand2; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand2 = Zeros(); operand3 = Ones(); V[d] = operand1 EOR ((operand2 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Exclusive OR (vector). This instruction performs a bitwise Exclusive OR operation between the two source SIMD&FP registers, and places the result in the destination SIMD&FP register.
EOR Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand2; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand2 = Zeros(); operand3 = Ones(); V[d] = operand1 EOR ((operand2 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Exclusive OR (vector). This instruction performs a bitwise Exclusive OR operation between the two source SIMD&FP registers, and places the result in the destination SIMD&FP register.
EOR Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand2; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand2 = Zeros(); operand3 = Ones(); V[d] = operand1 EOR ((operand2 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Exclusive OR (vector). This instruction performs a bitwise Exclusive OR operation between the two source SIMD&FP registers, and places the result in the destination SIMD&FP register.
EOR Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand2; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand2 = Zeros(); operand3 = Ones(); V[d] = operand1 EOR ((operand2 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Exclusive OR (vector). This instruction performs a bitwise Exclusive OR operation between the two source SIMD&FP registers, and places the result in the destination SIMD&FP register.
EOR Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand2; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand2 = Zeros(); operand3 = Ones(); V[d] = operand1 EOR ((operand2 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Exclusive OR (vector). This instruction performs a bitwise Exclusive OR operation between the two source SIMD&FP registers, and places the result in the destination SIMD&FP register.
EOR Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand2; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand2 = Zeros(); operand3 = Ones(); V[d] = operand1 EOR ((operand2 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Exclusive OR (vector). This instruction performs a bitwise Exclusive OR operation between the two source SIMD&FP registers, and places the result in the destination SIMD&FP register.
EOR Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand2; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand2 = Zeros(); operand3 = Ones(); V[d] = operand1 EOR ((operand2 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Exclusive OR (vector). This instruction performs a bitwise Exclusive OR operation between the two source SIMD&FP registers, and places the result in the destination SIMD&FP register.
EOR Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand2; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand2 = Zeros(); operand3 = Ones(); V[d] = operand1 EOR ((operand2 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Exclusive OR (vector). This instruction performs a bitwise Exclusive OR operation between the two source SIMD&FP registers, and places the result in the destination SIMD&FP register.
EOR Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand2; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand2 = Zeros(); operand3 = Ones(); V[d] = operand1 EOR ((operand2 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Exclusive OR (vector). This instruction performs a bitwise Exclusive OR operation between the two source SIMD&FP registers, and places the result in the destination SIMD&FP register.
EOR Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand2; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand2 = Zeros(); operand3 = Ones(); V[d] = operand1 EOR ((operand2 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Exclusive OR (vector). This instruction performs a bitwise Exclusive OR operation between the two source SIMD&FP registers, and places the result in the destination SIMD&FP register.
EOR Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand2; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand2 = Zeros(); operand3 = Ones(); V[d] = operand1 EOR ((operand2 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Exclusive OR (vector). This instruction performs a bitwise Exclusive OR operation between the two source SIMD&FP registers, and places the result in the destination SIMD&FP register.
EOR Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand2; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand2 = Zeros(); operand3 = Ones(); V[d] = operand1 EOR ((operand2 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Exclusive OR (vector). This instruction performs a bitwise Exclusive OR operation between the two source SIMD&FP registers, and places the result in the destination SIMD&FP register.
EOR Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand2; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand2 = Zeros(); operand3 = Ones(); V[d] = operand1 EOR ((operand2 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Exclusive OR (vector). This instruction performs a bitwise Exclusive OR operation between the two source SIMD&FP registers, and places the result in the destination SIMD&FP register.
EOR Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand2; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand2 = Zeros(); operand3 = Ones(); V[d] = operand1 EOR ((operand2 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Exclusive OR (vector). This instruction performs a bitwise Exclusive OR operation between the two source SIMD&FP registers, and places the result in the destination SIMD&FP register.
EOR Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand2; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand2 = Zeros(); operand3 = Ones(); V[d] = operand1 EOR ((operand2 EOR operand4) AND operand3);
v7/A32/A64
Bitwise bit Clear (vector, register). This instruction performs a bitwise AND between the first source SIMD&FP register and the complement of the second source SIMD&FP register, and writes the result to the destination SIMD&FP register.
BIC Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise bit Clear (vector, register). This instruction performs a bitwise AND between the first source SIMD&FP register and the complement of the second source SIMD&FP register, and writes the result to the destination SIMD&FP register.
BIC Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise bit Clear (vector, register). This instruction performs a bitwise AND between the first source SIMD&FP register and the complement of the second source SIMD&FP register, and writes the result to the destination SIMD&FP register.
BIC Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise bit Clear (vector, register). This instruction performs a bitwise AND between the first source SIMD&FP register and the complement of the second source SIMD&FP register, and writes the result to the destination SIMD&FP register.
BIC Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise bit Clear (vector, register). This instruction performs a bitwise AND between the first source SIMD&FP register and the complement of the second source SIMD&FP register, and writes the result to the destination SIMD&FP register.
BIC Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise bit Clear (vector, register). This instruction performs a bitwise AND between the first source SIMD&FP register and the complement of the second source SIMD&FP register, and writes the result to the destination SIMD&FP register.
BIC Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise bit Clear (vector, register). This instruction performs a bitwise AND between the first source SIMD&FP register and the complement of the second source SIMD&FP register, and writes the result to the destination SIMD&FP register.
BIC Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise bit Clear (vector, register). This instruction performs a bitwise AND between the first source SIMD&FP register and the complement of the second source SIMD&FP register, and writes the result to the destination SIMD&FP register.
BIC Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise bit Clear (vector, register). This instruction performs a bitwise AND between the first source SIMD&FP register and the complement of the second source SIMD&FP register, and writes the result to the destination SIMD&FP register.
BIC Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise bit Clear (vector, register). This instruction performs a bitwise AND between the first source SIMD&FP register and the complement of the second source SIMD&FP register, and writes the result to the destination SIMD&FP register.
BIC Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise bit Clear (vector, register). This instruction performs a bitwise AND between the first source SIMD&FP register and the complement of the second source SIMD&FP register, and writes the result to the destination SIMD&FP register.
BIC Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise bit Clear (vector, register). This instruction performs a bitwise AND between the first source SIMD&FP register and the complement of the second source SIMD&FP register, and writes the result to the destination SIMD&FP register.
BIC Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise bit Clear (vector, register). This instruction performs a bitwise AND between the first source SIMD&FP register and the complement of the second source SIMD&FP register, and writes the result to the destination SIMD&FP register.
BIC Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise bit Clear (vector, register). This instruction performs a bitwise AND between the first source SIMD&FP register and the complement of the second source SIMD&FP register, and writes the result to the destination SIMD&FP register.
BIC Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise bit Clear (vector, register). This instruction performs a bitwise AND between the first source SIMD&FP register and the complement of the second source SIMD&FP register, and writes the result to the destination SIMD&FP register.
BIC Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise bit Clear (vector, register). This instruction performs a bitwise AND between the first source SIMD&FP register and the complement of the second source SIMD&FP register, and writes the result to the destination SIMD&FP register.
BIC Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 AND operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR NOT (vector). This instruction performs a bitwise OR NOT between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORN Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR NOT (vector). This instruction performs a bitwise OR NOT between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORN Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR NOT (vector). This instruction performs a bitwise OR NOT between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORN Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR NOT (vector). This instruction performs a bitwise OR NOT between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORN Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR NOT (vector). This instruction performs a bitwise OR NOT between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORN Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR NOT (vector). This instruction performs a bitwise OR NOT between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORN Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR NOT (vector). This instruction performs a bitwise OR NOT between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORN Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR NOT (vector). This instruction performs a bitwise OR NOT between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORN Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR NOT (vector). This instruction performs a bitwise OR NOT between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORN Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR NOT (vector). This instruction performs a bitwise OR NOT between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORN Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR NOT (vector). This instruction performs a bitwise OR NOT between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORN Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR NOT (vector). This instruction performs a bitwise OR NOT between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORN Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR NOT (vector). This instruction performs a bitwise OR NOT between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORN Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR NOT (vector). This instruction performs a bitwise OR NOT between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORN Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR NOT (vector). This instruction performs a bitwise OR NOT between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORN Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise inclusive OR NOT (vector). This instruction performs a bitwise OR NOT between the two source SIMD&FP registers, and writes the result to the destination SIMD&FP register.
ORN Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; operand2 = NOT(operand2); result = operand1 OR operand2; V[d] = result;
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.8B,Vn.8B,Vm.8B
a → Vd.8B
b → Vn.8B
c → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
A64
Bitwise Select. This instruction sets each bit in the destination SIMD&FP register to the corresponding bit from the first source SIMD&FP register when the original destination bit was 1, otherwise from the second source SIMD&FP register.
BSL Vd.16B,Vn.16B,Vm.16B
a → Vd.16B
b → Vn.16B
c → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[m]; operand3 = V[d]; V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane1],Vn.B[lane2]
a → Vd.8B
0 << lane1 << 7
b → Vn.8B
0 << lane2 << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane1],Vn.B[lane2]
a → Vd.16B
0 << lane1 << 15
b → Vn.8B
0 << lane2 << 7
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane1],Vn.H[lane2]
a → Vd.4H
0 << lane1 << 3
b → Vn.4H
0 << lane2 << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane1],Vn.H[lane2]
a → Vd.8H
0 << lane1 << 7
b → Vn.4H
0 << lane2 << 3
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane1],Vn.S[lane2]
a → Vd.2S
0 << lane1 << 1
b → Vn.2S
0 << lane2 << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane1],Vn.S[lane2]
a → Vd.4S
0 << lane1 << 3
b → Vn.2S
0 << lane2 << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane2]
a → UNUSED
0 << lane1 << 0
b → Vn.1D
0 << lane2 << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[lane1],Vn.D[lane2]
a → Vd.2D
0 << lane1 << 1
b → Vn.1D
0 << lane2 << 0
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane1],Vn.B[lane2]
a → Vd.8B
0 << lane1 << 7
b → Vn.8B
0 << lane2 << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane1],Vn.B[lane2]
a → Vd.16B
0 << lane1 << 15
b → Vn.8B
0 << lane2 << 7
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane1],Vn.H[lane2]
a → Vd.4H
0 << lane1 << 3
b → Vn.4H
0 << lane2 << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane1],Vn.H[lane2]
a → Vd.8H
0 << lane1 << 7
b → Vn.4H
0 << lane2 << 3
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane1],Vn.S[lane2]
a → Vd.2S
0 << lane1 << 1
b → Vn.2S
0 << lane2 << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane1],Vn.S[lane2]
a → Vd.4S
0 << lane1 << 3
b → Vn.2S
0 << lane2 << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane2]
a → UNUSED
0 << lane1 << 0
b → Vn.1D
0 << lane2 << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[lane1],Vn.D[lane2]
a → Vd.2D
0 << lane1 << 1
b → Vn.1D
0 << lane2 << 0
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane2]
a → UNUSED
0 << lane1 << 0
b → Vn.1D
0 << lane2 << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[lane1],Vn.D[lane2]
a → Vd.2D
0 << lane1 << 1
b → Vn.1D
0 << lane2 << 0
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane1],Vn.S[lane2]
a → Vd.2S
0 << lane1 << 1
b → Vn.2S
0 << lane2 << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane1],Vn.S[lane2]
a → Vd.4S
0 << lane1 << 3
b → Vn.2S
0 << lane2 << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane2]
a → UNUSED
0 << lane1 << 0
b → Vn.1D
0 << lane2 << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[lane1],Vn.D[lane2]
a → Vd.2D
0 << lane1 << 1
b → Vn.1D
0 << lane2 << 0
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane1],Vn.B[lane2]
a → Vd.8B
0 << lane1 << 7
b → Vn.8B
0 << lane2 << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane1],Vn.B[lane2]
a → Vd.16B
0 << lane1 << 15
b → Vn.8B
0 << lane2 << 7
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane1],Vn.H[lane2]
a → Vd.4H
0 << lane1 << 3
b → Vn.4H
0 << lane2 << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane1],Vn.H[lane2]
a → Vd.8H
0 << lane1 << 7
b → Vn.4H
0 << lane2 << 3
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane1],Vn.B[lane2]
a → Vd.8B
0 << lane1 << 7
b → Vn.16B
0 << lane2 << 15
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane1],Vn.B[lane2]
a → Vd.16B
0 << lane1 << 15
b → Vn.16B
0 << lane2 << 15
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane1],Vn.H[lane2]
a → Vd.4H
0 << lane1 << 3
b → Vn.8H
0 << lane2 << 7
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane1],Vn.H[lane2]
a → Vd.8H
0 << lane1 << 7
b → Vn.8H
0 << lane2 << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane1],Vn.S[lane2]
a → Vd.2S
0 << lane1 << 1
b → Vn.4S
0 << lane2 << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane1],Vn.S[lane2]
a → Vd.4S
0 << lane1 << 3
b → Vn.4S
0 << lane2 << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane2]
a → UNUSED
0 << lane1 << 0
b → Vn.2D
0 << lane2 << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[lane1],Vn.D[lane2]
a → Vd.2D
0 << lane1 << 1
b → Vn.2D
0 << lane2 << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane1],Vn.B[lane2]
a → Vd.8B
0 << lane1 << 7
b → Vn.16B
0 << lane2 << 15
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane1],Vn.B[lane2]
a → Vd.16B
0 << lane1 << 15
b → Vn.16B
0 << lane2 << 15
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane1],Vn.H[lane2]
a → Vd.4H
0 << lane1 << 3
b → Vn.8H
0 << lane2 << 7
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane1],Vn.H[lane2]
a → Vd.8H
0 << lane1 << 7
b → Vn.8H
0 << lane2 << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane1],Vn.S[lane2]
a → Vd.2S
0 << lane1 << 1
b → Vn.4S
0 << lane2 << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane1],Vn.S[lane2]
a → Vd.4S
0 << lane1 << 3
b → Vn.4S
0 << lane2 << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane2]
a → UNUSED
0 << lane1 << 0
b → Vn.2D
0 << lane2 << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[lane1],Vn.D[lane2]
a → Vd.2D
0 << lane1 << 1
b → Vn.2D
0 << lane2 << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane2]
a → UNUSED
0 << lane1 << 0
b → Vn.2D
0 << lane2 << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[lane1],Vn.D[lane2]
a → Vd.2D
0 << lane1 << 1
b → Vn.2D
0 << lane2 << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane1],Vn.S[lane2]
a → Vd.2S
0 << lane1 << 1
b → Vn.4S
0 << lane2 << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane1],Vn.S[lane2]
a → Vd.4S
0 << lane1 << 3
b → Vn.4S
0 << lane2 << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane2]
a → UNUSED
0 << lane1 << 0
b → Vn.2D
0 << lane2 << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[lane1],Vn.D[lane2]
a → Vd.2D
0 << lane1 << 1
b → Vn.2D
0 << lane2 << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane1],Vn.B[lane2]
a → Vd.8B
0 << lane1 << 7
b → Vn.16B
0 << lane2 << 15
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane1],Vn.B[lane2]
a → Vd.16B
0 << lane1 << 15
b → Vn.16B
0 << lane2 << 15
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane1],Vn.H[lane2]
a → Vd.4H
0 << lane1 << 3
b → Vn.8H
0 << lane2 << 7
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane1],Vn.H[lane2]
a → Vd.8H
0 << lane1 << 7
b → Vn.8H
0 << lane2 << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Reverse Bit order (vector). This instruction reads each vector element from the source SIMD&FP register, reverses the bits of the element, places the results into a vector, and writes the vector to the destination SIMD&FP register.
RBIT Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; bits(esize) rev; for e = 0 to elements-1 element = Elem[operand, e, esize]; for i = 0 to esize-1 rev<esize-1-i> = element<i>; Elem[result, e, esize] = rev; V[d] = result;
A64
Reverse Bit order (vector). This instruction reads each vector element from the source SIMD&FP register, reverses the bits of the element, places the results into a vector, and writes the vector to the destination SIMD&FP register.
RBIT Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; bits(esize) rev; for e = 0 to elements-1 element = Elem[operand, e, esize]; for i = 0 to esize-1 rev<esize-1-i> = element<i>; Elem[result, e, esize] = rev; V[d] = result;
A64
Reverse Bit order (vector). This instruction reads each vector element from the source SIMD&FP register, reverses the bits of the element, places the results into a vector, and writes the vector to the destination SIMD&FP register.
RBIT Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; bits(esize) rev; for e = 0 to elements-1 element = Elem[operand, e, esize]; for i = 0 to esize-1 rev<esize-1-i> = element<i>; Elem[result, e, esize] = rev; V[d] = result;
A64
Reverse Bit order (vector). This instruction reads each vector element from the source SIMD&FP register, reverses the bits of the element, places the results into a vector, and writes the vector to the destination SIMD&FP register.
RBIT Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; bits(esize) rev; for e = 0 to elements-1 element = Elem[operand, e, esize]; for i = 0 to esize-1 rev<esize-1-i> = element<i>; Elem[result, e, esize] = rev; V[d] = result;
A64
Reverse Bit order (vector). This instruction reads each vector element from the source SIMD&FP register, reverses the bits of the element, places the results into a vector, and writes the vector to the destination SIMD&FP register.
RBIT Vd.8B,Vn.8B
a → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; bits(esize) rev; for e = 0 to elements-1 element = Elem[operand, e, esize]; for i = 0 to esize-1 rev<esize-1-i> = element<i>; Elem[result, e, esize] = rev; V[d] = result;
A64
Reverse Bit order (vector). This instruction reads each vector element from the source SIMD&FP register, reverses the bits of the element, places the results into a vector, and writes the vector to the destination SIMD&FP register.
RBIT Vd.16B,Vn.16B
a → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; bits(esize) rev; for e = 0 to elements-1 element = Elem[operand, e, esize]; for i = 0 to esize-1 rev<esize-1-i> = element<i>; Elem[result, e, esize] = rev; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[0],Xn
a → Xn
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[0],Xn
a → Xn
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[0],Xn
a → Xn
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[0],Xn
a → Xn
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[0],Xn
a → Xn
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[0],Xn
a → Xn
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[0],Xn
a → Xn
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[0],Xn
a → Xn
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[0],Xn
a → Xn
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[0],Xn
a → Xn
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[0],Xn
a → Xn
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[0],Xn
a → Xn
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[0],Xn
a → Xn
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[0],Xn
a → Xn
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8B,rn
value → rn
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.16B,rn
value → rn
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4H,rn
value → rn
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8H,rn
value → rn
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2S,rn
value → rn
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4S,rn
value → rn
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Dd.D[0],xn
value → rn
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2D,rn
value → rn
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8B,rn
value → rn
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.16B,rn
value → rn
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4H,rn
value → rn
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8H,rn
value → rn
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2S,rn
value → rn
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4S,rn
value → rn
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Dd.D[0],xn
value → rn
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2D,rn
value → rn
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Dd.D[0],xn
value → rn
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2D,rn
value → rn
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2S,rn
value → rn
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4S,rn
value → rn
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8B,rn
value → rn
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.16B,rn
value → rn
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4H,rn
value → rn
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8H,rn
value → rn
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Dd.D[0],xn
value → rn
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2D,rn
value → rn
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8B,rn
value → rn
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.16B,rn
value → rn
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4H,rn
value → rn
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8H,rn
value → rn
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2S,rn
value → rn
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4S,rn
value → rn
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,rn
value → rn
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2D,rn
value → rn
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8B,rn
value → rn
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.16B,rn
value → rn
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4H,rn
value → rn
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8H,rn
value → rn
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2S,rn
value → rn
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4S,rn
value → rn
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,rn
value → rn
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2D,rn
value → rn
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2S,rn
value → rn
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4S,rn
value → rn
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8B,rn
value → rn
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.16B,rn
value → rn
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4H,rn
value → rn
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8H,rn
value → rn
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,rn
value → rn
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2D,rn
value → rn
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8B,Vn.B[lane]
vec → Vn.8B
0 << lane << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.16B,Vn.B[lane]
vec → Vn.8B
0 << lane << 7
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4H,Vn.H[lane]
vec → Vn.4H
0 << lane << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8H,Vn.H[lane]
vec → Vn.4H
0 << lane << 3
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2S,Vn.S[lane]
vec → Vn.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4S,Vn.S[lane]
vec → Vn.2S
0 << lane << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane]
vec → Vn.1D
0 << lane << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2D,Vn.D[lane]
vec → Vn.1D
0 << lane << 0
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8B,Vn.B[lane]
vec → Vn.8B
0 << lane << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.16B,Vn.B[lane]
vec → Vn.8B
0 << lane << 7
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4H,Vn.H[lane]
vec → Vn.4H
0 << lane << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8H,Vn.H[lane]
vec → Vn.4H
0 << lane << 3
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2S,Vn.S[lane]
vec → Vn.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4S,Vn.S[lane]
vec → Vn.2S
0 << lane << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane]
vec → Vn.1D
0 << lane << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2D,Vn.D[lane]
vec → Vn.1D
0 << lane << 0
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane]
vec → Vn.1D
0 << lane << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2D,Vn.D[lane]
vec → Vn.1D
0 << lane << 0
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2S,Vn.S[lane]
vec → Vn.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4S,Vn.S[lane]
vec → Vn.2S
0 << lane << 1
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8B,Vn.B[lane]
vec → Vn.8B
0 << lane << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.16B,Vn.B[lane]
vec → Vn.8B
0 << lane << 7
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4H,Vn.H[lane]
vec → Vn.4H
0 << lane << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8H,Vn.H[lane]
vec → Vn.4H
0 << lane << 3
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane]
vec → Vn.1D
0 << lane << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2D,Vn.D[lane]
vec → Vn.1D
0 << lane << 0
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8B,Vn.B[lane]
vec → Vn.16B
0 << lane << 15
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.16B,Vn.B[lane]
vec → Vn.16B
0 << lane << 15
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4H,Vn.H[lane]
vec → Vn.8H
0 << lane << 7
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8H,Vn.H[lane]
vec → Vn.8H
0 << lane << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2S,Vn.S[lane]
vec → Vn.4S
0 << lane << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4S,Vn.S[lane]
vec → Vn.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane]
vec → Vn.2D
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2D,Vn.D[lane]
vec → Vn.2D
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8B,Vn.B[lane]
vec → Vn.16B
0 << lane << 15
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.16B,Vn.B[lane]
vec → Vn.16B
0 << lane << 15
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4H,Vn.H[lane]
vec → Vn.8H
0 << lane << 7
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8H,Vn.H[lane]
vec → Vn.8H
0 << lane << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2S,Vn.S[lane]
vec → Vn.4S
0 << lane << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4S,Vn.S[lane]
vec → Vn.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane]
vec → Vn.2D
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2D,Vn.D[lane]
vec → Vn.2D
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane]
vec → Vn.2D
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2D,Vn.D[lane]
vec → Vn.2D
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2S,Vn.S[lane]
vec → Vn.4S
0 << lane << 3
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4S,Vn.S[lane]
vec → Vn.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8B,Vn.B[lane]
vec → Vn.16B
0 << lane << 15
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.16B,Vn.B[lane]
vec → Vn.16B
0 << lane << 15
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.4H,Vn.H[lane]
vec → Vn.8H
0 << lane << 7
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.8H,Vn.H[lane]
vec → Vn.8H
0 << lane << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane]
vec → Vn.2D
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.2D,Vn.D[lane]
vec → Vn.2D
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
DUP Vd.1D,Vn.D[0] INS Vd.D[1],Vm.D[0]
low → Vn.8B
high → Vm.8B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
DUP Vd.1D,Vn.D[0] INS Vd.D[1],Vm.D[0]
low → Vn.4H
high → Vm.4H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
DUP Vd.1D,Vn.D[0] INS Vd.D[1],Vm.D[0]
low → Vn.2S
high → Vm.2S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
DUP Vd.1D,Vn.D[0] INS Vd.D[1],Vm.D[0]
low → Vn.1D
high → Vm.1D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
DUP Vd.1D,Vn.D[0] INS Vd.D[1],Vm.D[0]
low → Vn.8B
high → Vm.8B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
DUP Vd.1D,Vn.D[0] INS Vd.D[1],Vm.D[0]
low → Vn.4H
high → Vm.4H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
DUP Vd.1D,Vn.D[0] INS Vd.D[1],Vm.D[0]
low → Vn.2S
high → Vm.2S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
DUP Vd.1D,Vn.D[0] INS Vd.D[1],Vm.D[0]
low → Vn.1D
high → Vm.1D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
DUP Vd.1D,Vn.D[0] INS Vd.D[1],Vm.D[0]
low → Vn.1D
high → Vm.1D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
DUP Vd.1D,Vn.D[0] INS Vd.D[1],Vm.D[0]
low → Vn.4H
high → Vm.4H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
DUP Vd.1D,Vn.D[0] INS Vd.D[1],Vm.D[0]
low → Vn.2S
high → Vm.2S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
DUP Vd.1D,Vn.D[0] INS Vd.D[1],Vm.D[0]
low → Vn.8B
high → Vm.8B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
DUP Vd.1D,Vn.D[0] INS Vd.D[1],Vm.D[0]
low → Vn.4H
high → Vm.4H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
DUP Vd.1D,Vn.D[0] INS Vd.D[1],Vm.D[0]
low → Vn.1D
high → Vm.1D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[1]
a → Vn.16B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[1]
a → Vn.8H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[1]
a → Vn.4S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[1]
a → Vn.2D
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[1]
a → Vn.16B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[1]
a → Vn.8H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[1]
a → Vn.4S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[1]
a → Vn.2D
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[1]
a → Vn.2D
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[1]
a → Vn.8H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[1]
a → Vn.4S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[1]
a → Vn.16B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[1]
a → Vn.8H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[1]
a → Vn.2D
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[0]
a → Vn.16B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[0]
a → Vn.8H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[0]
a → Vn.4S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[0]
a → Vn.2D
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[0]
a → Vn.16B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[0]
a → Vn.8H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[0]
a → Vn.4S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[0]
a → Vn.2D
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[0]
a → Vn.2D
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[0]
a → Vn.8H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[0]
a → Vn.4S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[0]
a → Vn.16B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[0]
a → Vn.8H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Vd.1D,Vn.D[0]
a → Vn.2D
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Bd,Vn.B[lane]
vec → Vn.8B
0 << lane << 7
Bd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Hd,Vn.H[lane]
vec → Vn.4H
0 << lane << 3
Hd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Sd,Vn.S[lane]
vec → Vn.2S
0 << lane << 1
Sd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane]
vec → Vn.1D
0 << lane << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Bd,Vn.B[lane]
vec → Vn.8B
0 << lane << 7
Bd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Hd,Vn.H[lane]
vec → Vn.4H
0 << lane << 3
Hd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Sd,Vn.S[lane]
vec → Vn.2S
0 << lane << 1
Sd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane]
vec → Vn.1D
0 << lane << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Sd,Vn.S[lane]
vec → Vn.2S
0 << lane << 1
Sd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane]
vec → Vn.1D
0 << lane << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Bd,Vn.B[lane]
vec → Vn.8B
0 << lane << 7
Bd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Hd,Vn.H[lane]
vec → Vn.4H
0 << lane << 3
Hd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Bd,Vn.B[lane]
vec → Vn.16B
0 << lane << 15
Bd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Hd,Vn.H[lane]
vec → Vn.8H
0 << lane << 7
Hd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Sd,Vn.S[lane]
vec → Vn.4S
0 << lane << 3
Sd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane]
vec → Vn.2D
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Bd,Vn.B[lane]
vec → Vn.16B
0 << lane << 15
Bd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Hd,Vn.H[lane]
vec → Vn.8H
0 << lane << 7
Hd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Sd,Vn.S[lane]
vec → Vn.4S
0 << lane << 3
Sd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane]
vec → Vn.2D
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Sd,Vn.S[lane]
vec → Vn.4S
0 << lane << 3
Sd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane]
vec → Vn.2D
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Bd,Vn.B[lane]
vec → Vn.16B
0 << lane << 15
Bd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Hd,Vn.H[lane]
vec → Vn.8H
0 << lane << 7
Hd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8B},[Xn]
ptr → Xn
Vt.8B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.16B},[Xn]
ptr → Xn
Vt.16B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4H},[Xn]
ptr → Xn
Vt.4H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8H},[Xn]
ptr → Xn
Vt.8H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2S},[Xn]
ptr → Xn
Vt.2S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4S},[Xn]
ptr → Xn
Vt.4S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D},[Xn]
ptr → Xn
Vt.1D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2D},[Xn]
ptr → Xn
Vt.2D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8B},[Xn]
ptr → Xn
Vt.8B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.16B},[Xn]
ptr → Xn
Vt.16B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4H},[Xn]
ptr → Xn
Vt.4H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8H},[Xn]
ptr → Xn
Vt.8H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2S},[Xn]
ptr → Xn
Vt.2S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4S},[Xn]
ptr → Xn
Vt.4S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D},[Xn]
ptr → Xn
Vt.1D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2D},[Xn]
ptr → Xn
Vt.2D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D},[Xn]
ptr → Xn
Vt.1D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2D},[Xn]
ptr → Xn
Vt.2D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4H},[Xn]
ptr → Xn
Vt.4H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8H},[Xn]
ptr → Xn
Vt.8H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2S},[Xn]
ptr → Xn
Vt.2S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4S},[Xn]
ptr → Xn
Vt.4S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8B},[Xn]
ptr → Xn
Vt.8B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.16B},[Xn]
ptr → Xn
Vt.16B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4H},[Xn]
ptr → Xn
Vt.4H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8H},[Xn]
ptr → Xn
Vt.8H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D},[Xn]
ptr → Xn
Vt.1D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2D},[Xn]
ptr → Xn
Vt.2D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.b}[lane],[Xn]
ptr → Xn
src → Vt.8B
0 << lane << 7
Vt.8B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.b}[lane],[Xn]
ptr → Xn
src → Vt.16B
0 << lane << 15
Vt.16B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.H}[lane],[Xn]
ptr → Xn
src → Vt.4H
0 << lane << 3
Vt.4H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.H}[lane],[Xn]
ptr → Xn
src → Vt.8H
0 << lane << 7
Vt.8H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.S}[lane],[Xn]
ptr → Xn
src → Vt.2S
0 << lane << 1
Vt.2S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.S}[lane],[Xn]
ptr → Xn
src → Vt.4S
0 << lane << 3
Vt.4S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.D}[lane],[Xn]
ptr → Xn
src → Vt.1D
0 << lane << 0
Vt.1D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.D}[lane],[Xn]
ptr → Xn
src → Vt.2D
0 << lane << 1
Vt.2D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.B}[lane],[Xn]
ptr → Xn
src → Vt.8B
0 << lane << 7
Vt.8B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.B}[lane],[Xn]
ptr → Xn
src → Vt.16B
0 << lane << 15
Vt.16B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.H}[lane],[Xn]
ptr → Xn
src → Vt.4H
0 << lane << 3
Vt.4H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.H}[lane],[Xn]
ptr → Xn
src → Vt.8H
0 << lane << 7
Vt.8H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.S}[lane],[Xn]
ptr → Xn
src → Vt.2S
0 << lane << 1
Vt.2S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.S}[lane],[Xn]
ptr → Xn
src → Vt.4S
0 << lane << 3
Vt.4S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.D}[lane],[Xn]
ptr → Xn
src → Vt.1D
0 << lane << 0
Vt.1D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.D}[lane],[Xn]
ptr → Xn
src → Vt.2D
0 << lane << 1
Vt.2D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.D}[lane],[Xn]
ptr → Xn
src → Vt.1D
0 << lane << 0
Vt.1D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.D}[lane],[Xn]
ptr → Xn
src → Vt.2D
0 << lane << 1
Vt.2D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.H}[lane],[Xn]
ptr → Xn
src → Vt.4H
0 << lane << 3
Vt.4H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.H}[lane],[Xn]
ptr → Xn
src → Vt.8H
0 << lane << 7
Vt.8H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.S}[lane],[Xn]
ptr → Xn
src → Vt.2S
0 << lane << 1
Vt.2S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.S}[lane],[Xn]
ptr → Xn
src → Vt.4S
0 << lane << 3
Vt.4S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.B}[lane],[Xn]
ptr → Xn
src → Vt.8B
0 << lane << 7
Vt.8B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.B}[lane],[Xn]
ptr → Xn
src → Vt.16B
0 << lane << 15
Vt.16B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.H}[lane],[Xn]
ptr → Xn
src → Vt.4H
0 << lane << 3
Vt.4H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.H}[lane],[Xn]
ptr → Xn
src → Vt.8H
0 << lane << 7
Vt.8H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.D}[lane],[Xn]
ptr → Xn
src → Vt.1D
0 << lane << 0
Vt.1D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.D}[lane],[Xn]
ptr → Xn
src → Vt.2D
0 << lane << 1
Vt.2D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.8B},[Xn]
ptr → Xn
Vt.8B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.16B},[Xn]
ptr → Xn
Vt.16B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.4H},[Xn]
ptr → Xn
Vt.4H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.8H},[Xn]
ptr → Xn
Vt.8H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.2S},[Xn]
ptr → Xn
Vt.2S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.4S},[Xn]
ptr → Xn
Vt.4S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D},[Xn]
ptr → Xn
Vt.1D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.2D},[Xn]
ptr → Xn
Vt.2D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.8B},[Xn]
ptr → Xn
Vt.8B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.16B},[Xn]
ptr → Xn
Vt.16B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.4H},[Xn]
ptr → Xn
Vt.4H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.8H},[Xn]
ptr → Xn
Vt.8H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.2S},[Xn]
ptr → Xn
Vt.2S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.4S},[Xn]
ptr → Xn
Vt.4S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D},[Xn]
ptr → Xn
Vt.1D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.2D},[Xn]
ptr → Xn
Vt.2D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D},[Xn]
ptr → Xn
Vt.1D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.2D},[Xn]
ptr → Xn
Vt.2D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.4H},[Xn]
ptr → Xn
Vt.4H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.8H},[Xn]
ptr → Xn
Vt.8H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.2S},[Xn]
ptr → Xn
Vt.2S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.4S},[Xn]
ptr → Xn
Vt.4S → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.8B},[Xn]
ptr → Xn
Vt.8B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.16B},[Xn]
ptr → Xn
Vt.16B → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.4H},[Xn]
ptr → Xn
Vt.4H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.8H},[Xn]
ptr → Xn
Vt.8H → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D},[Xn]
ptr → Xn
Vt.1D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load one single-element structure and Replicate to all lanes (of one register). This instruction loads a single-element structure from memory and replicates the structure to all the lanes of the SIMD&FP register.
LD1R {Vt.2D},[Xn]
ptr → Xn
Vt.2D → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8B},[Xn]
ptr → Xn
val → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.16B},[Xn]
ptr → Xn
val → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4H},[Xn]
ptr → Xn
val → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8H},[Xn]
ptr → Xn
val → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2S},[Xn]
ptr → Xn
val → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4S},[Xn]
ptr → Xn
val → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D},[Xn]
ptr → Xn
val → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2D},[Xn]
ptr → Xn
val → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8B},[Xn]
ptr → Xn
val → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.16B},[Xn]
ptr → Xn
val → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4H},[Xn]
ptr → Xn
val → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8H},[Xn]
ptr → Xn
val → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2S},[Xn]
ptr → Xn
val → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4S},[Xn]
ptr → Xn
val → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D},[Xn]
ptr → Xn
val → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2D},[Xn]
ptr → Xn
val → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D},[Xn]
ptr → Xn
val → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2D},[Xn]
ptr → Xn
val → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4H},[Xn]
ptr → Xn
val → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8H},[Xn]
ptr → Xn
val → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2S},[Xn]
ptr → Xn
val → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4S},[Xn]
ptr → Xn
val → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8B},[Xn]
ptr → Xn
val → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.16B},[Xn]
ptr → Xn
val → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4H},[Xn]
ptr → Xn
val → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8H},[Xn]
ptr → Xn
val → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D},[Xn]
ptr → Xn
val → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2D},[Xn]
ptr → Xn
val → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.b}[lane],[Xn]
ptr → Xn
val → Vt.8B
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.b}[lane],[Xn]
ptr → Xn
val → Vt.16B
0 << lane << 15
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.h}[lane],[Xn]
ptr → Xn
val → Vt.4H
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.h}[lane],[Xn]
ptr → Xn
val → Vt.8H
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.s}[lane],[Xn]
ptr → Xn
val → Vt.2S
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.s}[lane],[Xn]
ptr → Xn
val → Vt.4S
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.d}[lane],[Xn]
ptr → Xn
val → Vt.1D
0 << lane << 0
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.d}[lane],[Xn]
ptr → Xn
val → Vt.2D
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.b}[lane],[Xn]
ptr → Xn
val → Vt.8B
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.b}[lane],[Xn]
ptr → Xn
val → Vt.16B
0 << lane << 15
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.h}[lane],[Xn]
ptr → Xn
val → Vt.4H
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.h}[lane],[Xn]
ptr → Xn
val → Vt.8H
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.s}[lane],[Xn]
ptr → Xn
val → Vt.2S
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.s}[lane],[Xn]
ptr → Xn
val → Vt.4S
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.d}[lane],[Xn]
ptr → Xn
val → Vt.1D
0 << lane << 0
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.d}[lane],[Xn]
ptr → Xn
val → Vt.2D
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.d}[lane],[Xn]
ptr → Xn
val → Vt.1D
0 << lane << 0
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.d}[lane],[Xn]
ptr → Xn
val → Vt.2D
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.h}[lane],[Xn]
ptr → Xn
val → Vt.4H
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.h}[lane],[Xn]
ptr → Xn
val → Vt.8H
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.s}[lane],[Xn]
ptr → Xn
val → Vt.2S
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.s}[lane],[Xn]
ptr → Xn
val → Vt.4S
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.b}[lane],[Xn]
ptr → Xn
val → Vt.8B
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.b}[lane],[Xn]
ptr → Xn
val → Vt.16B
0 << lane << 15
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.h}[lane],[Xn]
ptr → Xn
val → Vt.4H
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.h}[lane],[Xn]
ptr → Xn
val → Vt.8H
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.d}[lane],[Xn]
ptr → Xn
val → Vt.1D
0 << lane << 0
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.d}[lane],[Xn]
ptr → Xn
val → Vt.2D
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.8B - Vt2.8B},[Xn]
ptr → Xn
Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.16B - Vt2.16B},[Xn]
ptr → Xn
Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.2S - Vt2.2S},[Xn]
ptr → Xn
Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.4S - Vt2.4S},[Xn]
ptr → Xn
Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.8B - Vt2.8B},[Xn]
ptr → Xn
Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.16B - Vt2.16B},[Xn]
ptr → Xn
Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.2S - Vt2.2S},[Xn]
ptr → Xn
Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.4S - Vt2.4S},[Xn]
ptr → Xn
Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.2S - Vt2.2S},[Xn]
ptr → Xn
Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.4S - Vt2.4S},[Xn]
ptr → Xn
Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.8B - Vt2.8B},[Xn]
ptr → Xn
Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.16B - Vt2.16B},[Xn]
ptr → Xn
Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.8B - Vt3.8B},[Xn]
ptr → Xn
Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.16B - Vt3.16B},[Xn]
ptr → Xn
Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.2S - Vt3.2S},[Xn]
ptr → Xn
Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.4S - Vt3.4S},[Xn]
ptr → Xn
Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.8B - Vt3.8B},[Xn]
ptr → Xn
Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.16B - Vt3.16B},[Xn]
ptr → Xn
Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.2S - Vt3.2S},[Xn]
ptr → Xn
Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.4S - Vt3.4S},[Xn]
ptr → Xn
Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.2S - Vt3.2S},[Xn]
ptr → Xn
Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.4S - Vt3.4S},[Xn]
ptr → Xn
Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.8B - Vt3.8B},[Xn]
ptr → Xn
Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.16B - Vt3.16B},[Xn]
ptr → Xn
Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.8B - Vt4.8B},[Xn]
ptr → Xn
Vt4.8B → result.val[3] Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.16B - Vt4.16B},[Xn]
ptr → Xn
Vt4.16B → result.val[3] Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
Vt4.4H → result.val[3] Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
Vt4.8H → result.val[3] Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.2S - Vt4.2S},[Xn]
ptr → Xn
Vt4.2S → result.val[3] Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.4S - Vt4.4S},[Xn]
ptr → Xn
Vt4.4S → result.val[3] Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.8B - Vt4.8B},[Xn]
ptr → Xn
Vt4.8B → result.val[3] Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.16B - Vt4.16B},[Xn]
ptr → Xn
Vt4.16B → result.val[3] Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
Vt4.4H → result.val[3] Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
Vt4.8H → result.val[3] Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.2S - Vt4.2S},[Xn]
ptr → Xn
Vt4.2S → result.val[3] Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.4S - Vt4.4S},[Xn]
ptr → Xn
Vt4.4S → result.val[3] Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
Vt4.4H → result.val[3] Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
Vt4.8H → result.val[3] Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.2S - Vt4.2S},[Xn]
ptr → Xn
Vt4.2S → result.val[3] Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.4S - Vt4.4S},[Xn]
ptr → Xn
Vt4.4S → result.val[3] Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.8B - Vt4.8B},[Xn]
ptr → Xn
Vt4.8B → result.val[3] Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.16B - Vt4.16B},[Xn]
ptr → Xn
Vt4.16B → result.val[3] Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
Vt4.4H → result.val[3] Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
Vt4.8H → result.val[3] Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
Vt4.1D → result.val[3] Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
Vt4.1D → result.val[3] Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
Vt4.1D → result.val[3] Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
Vt4.2D → result.val[3] Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
Vt4.2D → result.val[3] Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
Vt4.2D → result.val[3] Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
Vt4.1D → result.val[3] Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
Vt4.2D → result.val[3] Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.8B - Vt2.8B},[Xn]
ptr → Xn
Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.16B - Vt2.16B},[Xn]
ptr → Xn
Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.2S - Vt2.2S},[Xn]
ptr → Xn
Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.4S - Vt2.4S},[Xn]
ptr → Xn
Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.8B - Vt2.8B},[Xn]
ptr → Xn
Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.16B - Vt2.16B},[Xn]
ptr → Xn
Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.2S - Vt2.2S},[Xn]
ptr → Xn
Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.4S - Vt2.4S},[Xn]
ptr → Xn
Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.2S - Vt2.2S},[Xn]
ptr → Xn
Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.4S - Vt2.4S},[Xn]
ptr → Xn
Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.8B - Vt2.8B},[Xn]
ptr → Xn
Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.16B - Vt2.16B},[Xn]
ptr → Xn
Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure and Replicate to all lanes of two registers. This instruction loads a 2-element structure from memory and replicates the structure to all the lanes of the two SIMD&FP registers.
LD2R {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.8B - Vt3.8B},[Xn]
ptr → Xn
Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.16B - Vt3.16B},[Xn]
ptr → Xn
Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.2S - Vt3.2S},[Xn]
ptr → Xn
Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.4S - Vt3.4S},[Xn]
ptr → Xn
Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.8B - Vt3.8B},[Xn]
ptr → Xn
Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.16B - Vt3.16B},[Xn]
ptr → Xn
Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.2S - Vt3.2S},[Xn]
ptr → Xn
Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.4S - Vt3.4S},[Xn]
ptr → Xn
Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.2S - Vt3.2S},[Xn]
ptr → Xn
Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.4S - Vt3.4S},[Xn]
ptr → Xn
Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.8B - Vt3.8B},[Xn]
ptr → Xn
Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.16B - Vt3.16B},[Xn]
ptr → Xn
Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure and Replicate to all lanes of three registers. This instruction loads a 3-element structure from memory and replicates the structure to all the lanes of the three SIMD&FP registers.
LD3R {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.8B - Vt4.8B},[Xn]
ptr → Xn
Vt4.8B → result.val[3] Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.16B - Vt4.16B},[Xn]
ptr → Xn
Vt4.16B → result.val[3] Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
Vt4.4H → result.val[3] Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
Vt4.8H → result.val[3] Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.2S - Vt4.2S},[Xn]
ptr → Xn
Vt4.2S → result.val[3] Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.4S - Vt4.4S},[Xn]
ptr → Xn
Vt4.4S → result.val[3] Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.8B - Vt4.8B},[Xn]
ptr → Xn
Vt4.8B → result.val[3] Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.16B - Vt4.16B},[Xn]
ptr → Xn
Vt4.16B → result.val[3] Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
Vt4.4H → result.val[3] Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
Vt4.8H → result.val[3] Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.2S - Vt4.2S},[Xn]
ptr → Xn
Vt4.2S → result.val[3] Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.4S - Vt4.4S},[Xn]
ptr → Xn
Vt4.4S → result.val[3] Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
Vt4.4H → result.val[3] Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
Vt4.8H → result.val[3] Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.2S - Vt4.2S},[Xn]
ptr → Xn
Vt4.2S → result.val[3] Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.4S - Vt4.4S},[Xn]
ptr → Xn
Vt4.4S → result.val[3] Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.8B - Vt4.8B},[Xn]
ptr → Xn
Vt4.8B → result.val[3] Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.16B - Vt4.16B},[Xn]
ptr → Xn
Vt4.16B → result.val[3] Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
Vt4.4H → result.val[3] Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
Vt4.8H → result.val[3] Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
Vt4.1D → result.val[3] Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
Vt4.1D → result.val[3] Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
Vt4.1D → result.val[3] Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
Vt4.2D → result.val[3] Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
Vt4.2D → result.val[3] Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
Vt4.2D → result.val[3] Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
Vt4.1D → result.val[3] Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure and Replicate to all lanes of four registers. This instruction loads a 4-element structure from memory and replicates the structure to all the lanes of the four SIMD&FP registers.
LD4R {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
Vt4.2D → result.val[3] Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.8B - Vt2.8B},[Xn]
ptr → Xn
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.16B - Vt2.16B},[Xn]
ptr → Xn
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.2S - Vt2.2S},[Xn]
ptr → Xn
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.4S - Vt2.4S},[Xn]
ptr → Xn
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.8B - Vt2.8B},[Xn]
ptr → Xn
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.16B - Vt2.16B},[Xn]
ptr → Xn
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.2S - Vt2.2S},[Xn]
ptr → Xn
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.4S - Vt2.4S},[Xn]
ptr → Xn
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.2S - Vt2.2S},[Xn]
ptr → Xn
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.4S - Vt2.4S},[Xn]
ptr → Xn
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.8B - Vt2.8B},[Xn]
ptr → Xn
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.16B - Vt2.16B},[Xn]
ptr → Xn
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.8B - Vt3.8B},[Xn]
ptr → Xn
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.16B - Vt3.16B},[Xn]
ptr → Xn
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.2S - Vt3.2S},[Xn]
ptr → Xn
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.4S - Vt3.4S},[Xn]
ptr → Xn
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.8B - Vt3.8B},[Xn]
ptr → Xn
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.16B - Vt3.16B},[Xn]
ptr → Xn
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.2S - Vt3.2S},[Xn]
ptr → Xn
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.4S - Vt3.4S},[Xn]
ptr → Xn
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.2S - Vt3.2S},[Xn]
ptr → Xn
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.4S - Vt3.4S},[Xn]
ptr → Xn
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.8B - Vt3.8B},[Xn]
ptr → Xn
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.16B - Vt3.16B},[Xn]
ptr → Xn
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.8B - Vt4.8B},[Xn]
ptr → Xn
val.val[3] → Vt4.8B
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.16B - Vt4.16B},[Xn]
ptr → Xn
val.val[3] → Vt4.16B
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
val.val[3] → Vt4.4H
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
val.val[3] → Vt4.8H
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.2S - Vt4.2S},[Xn]
ptr → Xn
val.val[3] → Vt4.2S
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.4S - Vt4.4S},[Xn]
ptr → Xn
val.val[3] → Vt4.4S
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.8B - Vt4.8B},[Xn]
ptr → Xn
val.val[3] → Vt4.8B
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.16B - Vt4.16B},[Xn]
ptr → Xn
val.val[3] → Vt4.16B
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
val.val[3] → Vt4.4H
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
val.val[3] → Vt4.8H
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.2S - Vt4.2S},[Xn]
ptr → Xn
val.val[3] → Vt4.2S
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.4S - Vt4.4S},[Xn]
ptr → Xn
val.val[3] → Vt4.4S
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
val.val[3] → Vt4.4H
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
val.val[3] → Vt4.8H
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.2S - Vt4.2S},[Xn]
ptr → Xn
val.val[3] → Vt4.2S
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.4S - Vt4.4S},[Xn]
ptr → Xn
val.val[3] → Vt4.4S
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.8B - Vt4.8B},[Xn]
ptr → Xn
val.val[3] → Vt4.8B
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.16B - Vt4.16B},[Xn]
ptr → Xn
val.val[3] → Vt4.16B
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
val.val[3] → Vt4.4H
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
val.val[3] → Vt4.8H
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
val.val[3] → Vt4.1D
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
val.val[3] → Vt4.1D
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
val.val[3] → Vt4.1D
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
val.val[3] → Vt4.2D
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
val.val[3] → Vt4.2D
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
val.val[3] → Vt4.2D
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
val.val[3] → Vt4.1D
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
val.val[3] → Vt4.2D
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.h - Vt2.h}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.4H
src.val[0] → Vt.4H
0 << lane << 3
Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.h - Vt2.h}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.8H
src.val[0] → Vt.8H
0 << lane << 7
Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.s - Vt2.s}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.2S
src.val[0] → Vt.2S
0 << lane << 1
Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.s - Vt2.s}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.4S
src.val[0] → Vt.4S
0 << lane << 3
Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.h - Vt2.h}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.4H
src.val[0] → Vt.4H
0 << lane << 3
Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.h - Vt2.h}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.8H
src.val[0] → Vt.8H
0 << lane << 7
Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.s - Vt2.s}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.2S
src.val[0] → Vt.2S
0 << lane << 1
Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.s - Vt2.s}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.4S
src.val[0] → Vt.4S
0 << lane << 3
Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.h - Vt2.h}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.4H
src.val[0] → Vt.4H
0 << lane << 3
Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.h - Vt2.h}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.8H
src.val[0] → Vt.8H
0 << lane << 7
Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.s - Vt2.s}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.2S
src.val[0] → Vt.2S
0 << lane << 1
Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.s - Vt2.s}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.4S
src.val[0] → Vt.4S
0 << lane << 3
Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.h - Vt2.h}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.4H
src.val[0] → Vt.4H
0 << lane << 3
Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.h - Vt2.h}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.8H
src.val[0] → Vt.8H
0 << lane << 7
Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.b - Vt2.b}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.8B
src.val[0] → Vt.8B
0 << lane << 7
Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.b - Vt2.b}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.8B
src.val[0] → Vt.8B
0 << lane << 7
Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.b - Vt2.b}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.8B
src.val[0] → Vt.8B
0 << lane << 7
Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.b - Vt2.b}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.16B
src.val[0] → Vt.16B
0 << lane << 15
Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.b - Vt2.b}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.16B
src.val[0] → Vt.16B
0 << lane << 15
Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.b - Vt2.b}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.16B
src.val[0] → Vt.16B
0 << lane << 15
Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.d - Vt2.d}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.1D
src.val[0] → Vt.1D
0 << lane << 0
ptr → Xn Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.d - Vt2.d}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.2D
src.val[0] → Vt.2D
0 << lane << 1
ptr → Xn Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.d - Vt2.d}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.1D
src.val[0] → Vt.1D
0 << lane << 0
Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.d - Vt2.d}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.2D
src.val[0] → Vt.2D
0 << lane << 1
Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.d - Vt2.d}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.1D
src.val[0] → Vt.1D
0 << lane << 0
Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.d - Vt2.d}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.2D
src.val[0] → Vt.2D
0 << lane << 1
Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.d - Vt2.d}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.1D
src.val[0] → Vt.1D
0 << lane << 0
Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 2-element structure to one lane of two registers. This instruction loads a 2-element structure from memory and writes the result to the corresponding elements of the two SIMD&FP registers without affecting the other bits of the registers.
LD2 {Vt.d - Vt2.d}[lane],[Xn]
ptr → Xn
src.val[1] → Vt2.2D
src.val[0] → Vt.2D
0 << lane << 1
Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.h - Vt3.h}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.4H
src.val[1] → Vt2.4H
src.val[0] → Vt.4H
0 << lane << 3
Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.h - Vt3.h}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.8H
src.val[1] → Vt2.8H
src.val[0] → Vt.8H
0 << lane << 7
Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.s - Vt3.s}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.2S
src.val[1] → Vt2.2S
src.val[0] → Vt.2S
0 << lane << 1
Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.s - Vt3.s}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.4S
src.val[1] → Vt2.4S
src.val[0] → Vt.4S
0 << lane << 3
Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.h - Vt3.h}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.4H
src.val[1] → Vt2.4H
src.val[0] → Vt.4H
0 << lane << 3
Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.h - Vt3.h}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.8H
src.val[1] → Vt2.8H
src.val[0] → Vt.8H
0 << lane << 7
Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.s - Vt3.s}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.2S
src.val[1] → Vt2.2S
src.val[0] → Vt.2S
0 << lane << 1
Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.s - Vt3.s}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.4S
src.val[1] → Vt2.4S
src.val[0] → Vt.4S
0 << lane << 3
Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.h - Vt3.h}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.4H
src.val[1] → Vt2.4H
src.val[0] → Vt.4H
0 << lane << 3
Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.h - Vt3.h}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.8H
src.val[1] → Vt2.8H
src.val[0] → Vt.8H
0 << lane << 7
Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.s - Vt3.s}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.2S
src.val[1] → Vt2.2S
src.val[0] → Vt.2S
0 << lane << 1
Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.s - Vt3.s}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.4S
src.val[1] → Vt2.4S
src.val[0] → Vt.4S
0 << lane << 3
Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.h - Vt3.h}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.4H
src.val[1] → Vt2.4H
src.val[0] → Vt.4H
0 << lane << 3
Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.h - Vt3.h}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.8H
src.val[1] → Vt2.8H
src.val[0] → Vt.8H
0 << lane << 7
Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.b - Vt3.b}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.8B
src.val[1] → Vt2.8B
src.val[0] → Vt.8B
0 << lane << 7
Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.b - Vt3.b}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.8B
src.val[1] → Vt2.8B
src.val[0] → Vt.8B
0 << lane << 7
Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.b - Vt3.b}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.8B
src.val[1] → Vt2.8B
src.val[0] → Vt.8B
0 << lane << 7
Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.b - Vt3.b}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.16B
src.val[1] → Vt2.16B
src.val[0] → Vt.16B
0 << lane << 15
Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.b - Vt3.b}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.16B
src.val[1] → Vt2.16B
src.val[0] → Vt.16B
0 << lane << 15
Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.b - Vt3.b}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.16B
src.val[1] → Vt2.16B
src.val[0] → Vt.16B
0 << lane << 15
Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.d - Vt3.d}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.1D
src.val[1] → Vt2.1D
src.val[0] → Vt.1D
0 << lane << 0
Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.d - Vt3.d}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.2D
src.val[1] → Vt2.2D
src.val[0] → Vt.2D
0 << lane << 1
Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.d - Vt3.d}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.1D
src.val[1] → Vt2.1D
src.val[0] → Vt.1D
0 << lane << 0
Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.d - Vt3.d}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.2D
src.val[1] → Vt2.2D
src.val[0] → Vt.2D
0 << lane << 1
Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.d - Vt3.d}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.1D
src.val[1] → Vt2.1D
src.val[0] → Vt.1D
0 << lane << 0
Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.d - Vt3.d}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.2D
src.val[1] → Vt2.2D
src.val[0] → Vt.2D
0 << lane << 1
Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.d - Vt3.d}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.1D
src.val[1] → Vt2.1D
src.val[0] → Vt.1D
0 << lane << 0
Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 3-element structure to one lane of three registers). This instruction loads a 3-element structure from memory and writes the result to the corresponding elements of the three SIMD&FP registers without affecting the other bits of the registers.
LD3 {Vt.d - Vt3.d}[lane],[Xn]
ptr → Xn
src.val[2] → Vt3.2D
src.val[1] → Vt2.2D
src.val[0] → Vt.2D
0 << lane << 1
Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.h - Vt4.h}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.4H
src.val[2] → Vt3.4H
src.val[1] → Vt2.4H
src.val[0] → Vt.4H
0 << lane << 3
Vt4.4H → result.val[3] Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.h - Vt4.h}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.8H
src.val[2] → Vt3.8H
src.val[1] → Vt2.8H
src.val[0] → Vt.8H
0 << lane << 7
Vt4.8H → result.val[3] Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.s - Vt4.s}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.2S
src.val[2] → Vt3.2S
src.val[1] → Vt2.2S
src.val[0] → Vt.2S
0 << lane << 1
Vt4.2S → result.val[3] Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.s - Vt4.s}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.4S
src.val[2] → Vt3.4S
src.val[1] → Vt2.4S
src.val[0] → Vt.4S
0 << lane << 3
Vt4.4S → result.val[3] Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.h - Vt4.h}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.4H
src.val[2] → Vt3.4H
src.val[1] → Vt2.4H
src.val[0] → Vt.4H
0 << lane << 3
Vt4.4H → result.val[3] Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.h - Vt4.h}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.8H
src.val[2] → Vt3.8H
src.val[1] → Vt2.8H
src.val[0] → Vt.8H
0 << lane << 7
Vt4.8H → result.val[3] Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.s - Vt4.s}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.2S
src.val[2] → Vt3.2S
src.val[1] → Vt2.2S
src.val[0] → Vt.2S
0 << lane << 1
Vt4.2S → result.val[3] Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.s - Vt4.s}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.4S
src.val[2] → Vt3.4S
src.val[1] → Vt2.4S
src.val[0] → Vt.4S
0 << lane << 3
Vt4.4S → result.val[3] Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.h - Vt4.h}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.4H
src.val[2] → Vt3.4H
src.val[1] → Vt2.4H
src.val[0] → Vt.4H
0 << lane << 3
Vt4.4H → result.val[3] Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.h - Vt4.h}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.8H
src.val[2] → Vt3.8H
src.val[1] → Vt2.8H
src.val[0] → Vt.8H
0 << lane << 7
Vt4.8H → result.val[3] Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.s - Vt4.s}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.2S
src.val[2] → Vt3.2S
src.val[1] → Vt2.2S
src.val[0] → Vt.2S
0 << lane << 1
Vt4.2S → result.val[3] Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.s - Vt4.s}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.4S
src.val[2] → Vt3.4S
src.val[1] → Vt2.4S
src.val[0] → Vt.4S
0 << lane << 3
Vt4.4S → result.val[3] Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.h - Vt4.h}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.4H
src.val[2] → Vt3.4H
src.val[1] → Vt2.4H
src.val[0] → Vt.4H
0 << lane << 3
Vt4.4H → result.val[3] Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.h - Vt4.h}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.8H
src.val[2] → Vt3.8H
src.val[1] → Vt2.8H
src.val[0] → Vt.8H
0 << lane << 7
Vt4.8H → result.val[3] Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.b - Vt4.b}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.8B
src.val[2] → Vt3.8B
src.val[1] → Vt2.8B
src.val[0] → Vt.8B
0 << lane << 7
Vt4.8B → result.val[3] Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.b - Vt4.b}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.8B
src.val[2] → Vt3.8B
src.val[1] → Vt2.8B
src.val[0] → Vt.8B
0 << lane << 7
Vt4.8B → result.val[3] Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.b - Vt4.b}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.8B
src.val[2] → Vt3.8B
src.val[1] → Vt2.8B
src.val[0] → Vt.8B
0 << lane << 7
Vt4.8B → result.val[3] Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.b - Vt4.b}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.16B
src.val[2] → Vt3.16B
src.val[1] → Vt2.16B
src.val[0] → Vt.16B
0 << lane << 15
Vt4.16B → result.val[3] Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.b - Vt4.b}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.16B
src.val[2] → Vt3.16B
src.val[1] → Vt2.16B
src.val[0] → Vt.16B
0 << lane << 15
Vt4.16B → result.val[3] Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.b - Vt4.b}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.16B
src.val[2] → Vt3.16B
src.val[1] → Vt2.16B
src.val[0] → Vt.16B
0 << lane << 15
Vt4.16B → result.val[3] Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.d - Vt4.d}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.1D
src.val[2] → Vt3.1D
src.val[1] → Vt2.1D
src.val[0] → Vt.1D
0 << lane << 0
Vt4.1D → result.val[3] Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.d - Vt4.d}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.2D
src.val[2] → Vt3.2D
src.val[1] → Vt2.2D
src.val[0] → Vt.2D
0 << lane << 1
Vt4.2D → result.val[3] Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.d - Vt4.d}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.1D
src.val[2] → Vt3.1D
src.val[1] → Vt2.1D
src.val[0] → Vt.1D
0 << lane << 0
Vt4.1D → result.val[3] Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.d - Vt4.d}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.2D
src.val[2] → Vt3.2D
src.val[1] → Vt2.2D
src.val[0] → Vt.2D
0 << lane << 1
Vt4.2D → result.val[3] Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.d - Vt4.d}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.1D
src.val[2] → Vt3.1D
src.val[1] → Vt2.1D
src.val[0] → Vt.1D
0 << lane << 0
Vt4.1D → result.val[3] Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.d - Vt4.d}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.2D
src.val[2] → Vt3.2D
src.val[1] → Vt2.2D
src.val[0] → Vt.2D
0 << lane << 1
Vt4.2D → result.val[3] Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.d - Vt4.d}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.1D
src.val[2] → Vt3.1D
src.val[1] → Vt2.1D
src.val[0] → Vt.1D
0 << lane << 0
Vt4.1D → result.val[3] Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load single 4-element structure to one lane of four registers. This instruction loads a 4-element structure from memory and writes the result to the corresponding elements of the four SIMD&FP registers without affecting the other bits of the registers.
LD4 {Vt.d - Vt4.d}[lane],[Xn]
ptr → Xn
src.val[3] → Vt4.2D
src.val[2] → Vt3.2D
src.val[1] → Vt2.2D
src.val[0] → Vt.2D
0 << lane << 1
Vt4.2D → result.val[3] Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.b - Vt2.b}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.b - Vt2.b}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.b - Vt2.b}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.b - Vt3.b}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.b - Vt3.b}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.b - Vt3.b}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.b - Vt4.b}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.8B
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.b - Vt4.b}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.8B
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.b - Vt4.b}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.8B
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.h - Vt2.h}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.h - Vt2.h}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.s - Vt2.s}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.s - Vt2.s}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.h - Vt2.h}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.h - Vt2.h}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.s - Vt2.s}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.s - Vt2.s}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.h - Vt2.h}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.h - Vt2.h}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.s - Vt2.s}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.s - Vt2.s}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.h - Vt2.h}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.h - Vt2.h}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.b - Vt2.b}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
0 << lane << 15
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.b - Vt2.b}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
0 << lane << 15
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.b - Vt2.b}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
0 << lane << 15
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.d - Vt2.d}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
0 << lane << 0
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.d - Vt2.d}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.d - Vt2.d}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
0 << lane << 0
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.d - Vt2.d}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.d - Vt2.d}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
0 << lane << 0
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.d - Vt2.d}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.d - Vt2.d}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
0 << lane << 0
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 2-element structure from one lane of two registers. This instruction stores a 2-element structure to memory from corresponding elements of two SIMD&FP registers.
ST2 {Vt.d - Vt2.d}[lane],[Xn]
ptr → Xn
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
0 << lane << 2
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.h - Vt3.h}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.h - Vt3.h}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.s - Vt3.s}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.s - Vt3.s}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.h - Vt3.h}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.h - Vt3.h}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.s - Vt3.s}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.s - Vt3.s}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.h - Vt3.h}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.h - Vt3.h}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.s - Vt3.s}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.s - Vt3.s}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.h - Vt3.h}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.h - Vt3.h}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.b - Vt3.b}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
0 << lane << 15
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.b - Vt3.b}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
0 << lane << 15
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.b - Vt3.b}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
0 << lane << 15
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.d - Vt3.d}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
0 << lane << 0
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.d - Vt3.d}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.d - Vt3.d}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
0 << lane << 0
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.d - Vt3.d}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.d - Vt3.d}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
0 << lane << 0
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.d - Vt3.d}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.d - Vt3.d}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
0 << lane << 0
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 3-element structure from one lane of three registers. This instruction stores a 3-element structure to memory from corresponding elements of three SIMD&FP registers.
ST3 {Vt.d - Vt3.d}[lane],[Xn]
ptr → Xn
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.h - Vt4.h}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.4H
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.h - Vt4.h}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.8H
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.s - Vt4.s}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.2S
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.s - Vt4.s}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.4S
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.h - Vt4.h}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.4H
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.h - Vt4.h}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.8H
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.s - Vt4.s}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.2S
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.s - Vt4.s}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.4S
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.h - Vt4.h}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.4H
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.h - Vt4.h}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.8H
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.s - Vt4.s}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.2S
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.s - Vt4.s}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.4S
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.h - Vt4.h}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.4H
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
0 << lane << 3
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.h - Vt4.h}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.8H
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
0 << lane << 7
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.b - Vt4.b}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.16B
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
0 << lane << 15
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.b - Vt4.b}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.16B
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
0 << lane << 15
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.b - Vt4.b}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.16B
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
0 << lane << 15
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.d - Vt4.d}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.1D
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
0 << lane << 0
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.d - Vt4.d}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.2D
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.d - Vt4.d}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.1D
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
0 << lane << 0
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.d - Vt4.d}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.2D
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.d - Vt4.d}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.1D
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
0 << lane << 0
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.d - Vt4.d}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.2D
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.d - Vt4.d}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.1D
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
0 << lane << 0
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store single 4-element structure from one lane of four registers. This instruction stores a 4-element structure to memory from corresponding elements of four SIMD&FP registers.
ST4 {Vt.d - Vt4.d}[lane],[Xn]
ptr → Xn
val.val[3] → Vt4.2D
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
0 << lane << 1
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8B - Vt2.8B},[Xn]
ptr → Xn
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.16B - Vt2.16B},[Xn]
ptr → Xn
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2S - Vt2.2S},[Xn]
ptr → Xn
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4S - Vt2.4S},[Xn]
ptr → Xn
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8B - Vt2.8B},[Xn]
ptr → Xn
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.16B - Vt2.16B},[Xn]
ptr → Xn
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2S - Vt2.2S},[Xn]
ptr → Xn
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4S - Vt2.4S},[Xn]
ptr → Xn
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2S - Vt2.2S},[Xn]
ptr → Xn
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4S - Vt2.4S},[Xn]
ptr → Xn
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8B - Vt2.8B},[Xn]
ptr → Xn
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.16B - Vt2.16B},[Xn]
ptr → Xn
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8B - Vt3.8B},[Xn]
ptr → Xn
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.16B - Vt3.16B},[Xn]
ptr → Xn
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2S - Vt3.2S},[Xn]
ptr → Xn
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4S - Vt3.4S},[Xn]
ptr → Xn
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8B - Vt3.8B},[Xn]
ptr → Xn
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.16B - Vt3.16B},[Xn]
ptr → Xn
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2S - Vt3.2S},[Xn]
ptr → Xn
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4S - Vt3.4S},[Xn]
ptr → Xn
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2S - Vt3.2S},[Xn]
ptr → Xn
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4S - Vt3.4S},[Xn]
ptr → Xn
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8B - Vt3.8B},[Xn]
ptr → Xn
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.16B - Vt3.16B},[Xn]
ptr → Xn
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8B - Vt4.8B},[Xn]
ptr → Xn
val.val[3] → Vt4.8B
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.16B - Vt4.16B},[Xn]
ptr → Xn
val.val[3] → Vt4.16B
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
val.val[3] → Vt4.4H
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
val.val[3] → Vt4.8H
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2S - Vt4.2S},[Xn]
ptr → Xn
val.val[3] → Vt4.2S
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4S - Vt4.4S},[Xn]
ptr → Xn
val.val[3] → Vt4.4S
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8B - Vt4.8B},[Xn]
ptr → Xn
val.val[3] → Vt4.8B
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.16B - Vt4.16B},[Xn]
ptr → Xn
val.val[3] → Vt4.16B
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
val.val[3] → Vt4.4H
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
val.val[3] → Vt4.8H
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2S - Vt4.2S},[Xn]
ptr → Xn
val.val[3] → Vt4.2S
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4S - Vt4.4S},[Xn]
ptr → Xn
val.val[3] → Vt4.4S
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
val.val[3] → Vt4.4H
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
val.val[3] → Vt4.8H
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2S - Vt4.2S},[Xn]
ptr → Xn
val.val[3] → Vt4.2S
val.val[2] → Vt3.2S
val.val[1] → Vt2.2S
val.val[0] → Vt.2S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4S - Vt4.4S},[Xn]
ptr → Xn
val.val[3] → Vt4.4S
val.val[2] → Vt3.4S
val.val[1] → Vt2.4S
val.val[0] → Vt.4S
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8B - Vt4.8B},[Xn]
ptr → Xn
val.val[3] → Vt4.8B
val.val[2] → Vt3.8B
val.val[1] → Vt2.8B
val.val[0] → Vt.8B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.16B - Vt4.16B},[Xn]
ptr → Xn
val.val[3] → Vt4.16B
val.val[2] → Vt3.16B
val.val[1] → Vt2.16B
val.val[0] → Vt.16B
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
val.val[3] → Vt4.4H
val.val[2] → Vt3.4H
val.val[1] → Vt2.4H
val.val[0] → Vt.4H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
val.val[3] → Vt4.8H
val.val[2] → Vt3.8H
val.val[1] → Vt2.8H
val.val[0] → Vt.8H
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
val.val[3] → Vt4.1D
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
val.val[3] → Vt4.1D
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
val.val[3] → Vt4.1D
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
val.val[3] → Vt4.2D
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
val.val[3] → Vt4.2D
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
val.val[3] → Vt4.2D
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
val.val[3] → Vt4.1D
val.val[2] → Vt3.1D
val.val[1] → Vt2.1D
val.val[0] → Vt.1D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Store a single-element structure from one lane of one register. This instruction stores the specified element of a SIMD&FP register to memory.
ST1 {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
val.val[3] → Vt4.2D
val.val[2] → Vt3.2D
val.val[1] → Vt2.2D
val.val[0] → Vt.2D
void → result
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8B - Vt2.8B},[Xn]
ptr → Xn
Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.16B - Vt2.16B},[Xn]
ptr → Xn
Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2S - Vt2.2S},[Xn]
ptr → Xn
Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4S - Vt2.4S},[Xn]
ptr → Xn
Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8B - Vt2.8B},[Xn]
ptr → Xn
Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.16B - Vt2.16B},[Xn]
ptr → Xn
Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2S - Vt2.2S},[Xn]
ptr → Xn
Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4S - Vt2.4S},[Xn]
ptr → Xn
Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2S - Vt2.2S},[Xn]
ptr → Xn
Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4S - Vt2.4S},[Xn]
ptr → Xn
Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8B - Vt2.8B},[Xn]
ptr → Xn
Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.16B - Vt2.16B},[Xn]
ptr → Xn
Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4H - Vt2.4H},[Xn]
ptr → Xn
Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8H - Vt2.8H},[Xn]
ptr → Xn
Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt2.1D},[Xn]
ptr → Xn
Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2D - Vt2.2D},[Xn]
ptr → Xn
Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8B - Vt3.8B},[Xn]
ptr → Xn
Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.16B - Vt3.16B},[Xn]
ptr → Xn
Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2S - Vt3.2S},[Xn]
ptr → Xn
Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4S - Vt3.4S},[Xn]
ptr → Xn
Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8B - Vt3.8B},[Xn]
ptr → Xn
Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.16B - Vt3.16B},[Xn]
ptr → Xn
Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2S - Vt3.2S},[Xn]
ptr → Xn
Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4S - Vt3.4S},[Xn]
ptr → Xn
Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2S - Vt3.2S},[Xn]
ptr → Xn
Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4S - Vt3.4S},[Xn]
ptr → Xn
Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8B - Vt3.8B},[Xn]
ptr → Xn
Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.16B - Vt3.16B},[Xn]
ptr → Xn
Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4H - Vt3.4H},[Xn]
ptr → Xn
Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8H - Vt3.8H},[Xn]
ptr → Xn
Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt3.1D},[Xn]
ptr → Xn
Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2D - Vt3.2D},[Xn]
ptr → Xn
Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8B - Vt4.8B},[Xn]
ptr → Xn
Vt4.8B → result.val[3] Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.16B - Vt4.16B},[Xn]
ptr → Xn
Vt4.16B → result.val[3] Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
Vt4.4H → result.val[3] Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
Vt4.8H → result.val[3] Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2S - Vt4.2S},[Xn]
ptr → Xn
Vt4.2S → result.val[3] Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4S - Vt4.4S},[Xn]
ptr → Xn
Vt4.4S → result.val[3] Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8B - Vt4.8B},[Xn]
ptr → Xn
Vt4.8B → result.val[3] Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.16B - Vt4.16B},[Xn]
ptr → Xn
Vt4.16B → result.val[3] Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
Vt4.4H → result.val[3] Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
Vt4.8H → result.val[3] Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2S - Vt4.2S},[Xn]
ptr → Xn
Vt4.2S → result.val[3] Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4S - Vt4.4S},[Xn]
ptr → Xn
Vt4.4S → result.val[3] Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
Vt4.4H → result.val[3] Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
Vt4.8H → result.val[3] Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2S - Vt4.2S},[Xn]
ptr → Xn
Vt4.2S → result.val[3] Vt3.2S → result.val[2] Vt2.2S → result.val[1] Vt.2S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4S - Vt4.4S},[Xn]
ptr → Xn
Vt4.4S → result.val[3] Vt3.4S → result.val[2] Vt2.4S → result.val[1] Vt.4S → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8B - Vt4.8B},[Xn]
ptr → Xn
Vt4.8B → result.val[3] Vt3.8B → result.val[2] Vt2.8B → result.val[1] Vt.8B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.16B - Vt4.16B},[Xn]
ptr → Xn
Vt4.16B → result.val[3] Vt3.16B → result.val[2] Vt2.16B → result.val[1] Vt.16B → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.4H - Vt4.4H},[Xn]
ptr → Xn
Vt4.4H → result.val[3] Vt3.4H → result.val[2] Vt2.4H → result.val[1] Vt.4H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.8H - Vt4.8H},[Xn]
ptr → Xn
Vt4.8H → result.val[3] Vt3.8H → result.val[2] Vt2.8H → result.val[1] Vt.8H → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
Vt4.1D → result.val[3] Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
Vt4.1D → result.val[3] Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
Vt4.1D → result.val[3] Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
Vt4.2D → result.val[3] Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
Vt4.2D → result.val[3] Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
v7/A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
Vt4.2D → result.val[3] Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A32/A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.1D - Vt4.1D},[Xn]
ptr → Xn
Vt4.1D → result.val[3] Vt3.1D → result.val[2] Vt2.1D → result.val[1] Vt.1D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Load one single-element structure to one lane of one register. This instruction loads a single-element structure from memory and writes the result to the specified lane of the SIMD&FP register without affecting the other bits of the register.
LD1 {Vt.2D - Vt4.2D},[Xn]
ptr → Xn
Vt4.2D → result.val[3] Vt3.2D → result.val[2] Vt2.2D → result.val[1] Vt.2D → result.val[0]
if HaveMTEExt() then SetNotTagCheckedInstruction(!wback && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(64) offs; bits(128) rval; bits(esize) element; constant integer ebytes = esize DIV 8; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; offs = Zeros(); if replicate then // load and replicate to all elements for s = 0 to selem-1 element = Mem[address+offs, ebytes, AccType_VEC]; // replicate to fill 128- or 64-bit register V[t] = Replicate(element, datasize DIV esize); offs = offs + ebytes; t = (t + 1) MOD 32; else // load/store one element per register for s = 0 to selem-1 rval = V[t]; if memop == MemOp_LOAD then // insert into one lane of 128-bit register Elem[rval, index, esize] = Mem[address+offs, ebytes, AccType_VEC]; V[t] = rval; else // memop == MemOp_STORE // extract from one lane of 128-bit register Mem[address+offs, ebytes, AccType_VEC] = Elem[rval, index, esize]; offs = offs + ebytes; t = (t + 1) MOD 32; if wback then if m != 31 then offs = X[m]; if n == 31 then SP[] = address + offs; else X[n] = address + offs;
A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
v7/A32/A64
Floating-point Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FADDP Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPAdd(element1, element2, FPCR); V[d] = result;
v7/A32/A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Floating-point Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FADDP Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPAdd(element1, element2, FPCR); V[d] = result;
A64
Floating-point Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FADDP Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPAdd(element1, element2, FPCR); V[d] = result;
A64
Signed Add Long Pairwise. This instruction adds pairs of adjacent signed integer values from the vector in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SADDLP Vd.4H,Vn.8B
a → Vn.8B
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Signed Add Long Pairwise. This instruction adds pairs of adjacent signed integer values from the vector in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SADDLP Vd.8H,Vn.16B
a → Vn.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Signed Add Long Pairwise. This instruction adds pairs of adjacent signed integer values from the vector in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SADDLP Vd.2S,Vn.4H
a → Vn.4H
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Signed Add Long Pairwise. This instruction adds pairs of adjacent signed integer values from the vector in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SADDLP Vd.4S,Vn.8H
a → Vn.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Signed Add Long Pairwise. This instruction adds pairs of adjacent signed integer values from the vector in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SADDLP Vd.1D,Vn.2S
a → Vn.2S
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Signed Add Long Pairwise. This instruction adds pairs of adjacent signed integer values from the vector in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SADDLP Vd.2D,Vn.4S
a → Vn.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Unsigned Add Long Pairwise. This instruction adds pairs of adjacent unsigned integer values from the vector in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
UADDLP Vd.4H,Vn.8B
a → Vn.8B
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Unsigned Add Long Pairwise. This instruction adds pairs of adjacent unsigned integer values from the vector in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
UADDLP Vd.8H,Vn.16B
a → Vn.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Unsigned Add Long Pairwise. This instruction adds pairs of adjacent unsigned integer values from the vector in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
UADDLP Vd.2S,Vn.4H
a → Vn.4H
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Unsigned Add Long Pairwise. This instruction adds pairs of adjacent unsigned integer values from the vector in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
UADDLP Vd.4S,Vn.8H
a → Vn.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Unsigned Add Long Pairwise. This instruction adds pairs of adjacent unsigned integer values from the vector in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
UADDLP Vd.1D,Vn.2S
a → Vn.2S
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Unsigned Add Long Pairwise. This instruction adds pairs of adjacent unsigned integer values from the vector in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
UADDLP Vd.2D,Vn.4S
a → Vn.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Signed Add and Accumulate Long Pairwise. This instruction adds pairs of adjacent signed integer values from the vector in the source SIMD&FP register and accumulates the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SADALP Vd.4H,Vn.8B
a → Vd.4H
b → Vn.8B
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Signed Add and Accumulate Long Pairwise. This instruction adds pairs of adjacent signed integer values from the vector in the source SIMD&FP register and accumulates the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SADALP Vd.8H,Vn.16B
a → Vd.8H
b → Vn.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Signed Add and Accumulate Long Pairwise. This instruction adds pairs of adjacent signed integer values from the vector in the source SIMD&FP register and accumulates the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SADALP Vd.2S,Vn.4H
a → Vd.2S
b → Vn.4H
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Signed Add and Accumulate Long Pairwise. This instruction adds pairs of adjacent signed integer values from the vector in the source SIMD&FP register and accumulates the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SADALP Vd.4S,Vn.8H
a → Vd.4S
b → Vn.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Signed Add and Accumulate Long Pairwise. This instruction adds pairs of adjacent signed integer values from the vector in the source SIMD&FP register and accumulates the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SADALP Vd.1D,Vn.2S
a → Vd.1D
b → Vn.2S
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Signed Add and Accumulate Long Pairwise. This instruction adds pairs of adjacent signed integer values from the vector in the source SIMD&FP register and accumulates the results into the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SADALP Vd.2D,Vn.4S
a → Vd.2D
b → Vn.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Unsigned Add and Accumulate Long Pairwise. This instruction adds pairs of adjacent unsigned integer values from the vector in the source SIMD&FP register and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
UADALP Vd.4H,Vn.8B
a → Vd.4H
b → Vn.8B
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Unsigned Add and Accumulate Long Pairwise. This instruction adds pairs of adjacent unsigned integer values from the vector in the source SIMD&FP register and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
UADALP Vd.8H,Vn.16B
a → Vd.8H
b → Vn.16B
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Unsigned Add and Accumulate Long Pairwise. This instruction adds pairs of adjacent unsigned integer values from the vector in the source SIMD&FP register and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
UADALP Vd.2S,Vn.4H
a → Vd.2S
b → Vn.4H
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Unsigned Add and Accumulate Long Pairwise. This instruction adds pairs of adjacent unsigned integer values from the vector in the source SIMD&FP register and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
UADALP Vd.4S,Vn.8H
a → Vd.4S
b → Vn.8H
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Unsigned Add and Accumulate Long Pairwise. This instruction adds pairs of adjacent unsigned integer values from the vector in the source SIMD&FP register and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
UADALP Vd.1D,Vn.2S
a → Vd.1D
b → Vn.2S
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Unsigned Add and Accumulate Long Pairwise. This instruction adds pairs of adjacent unsigned integer values from the vector in the source SIMD&FP register and accumulates the results with the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
UADALP Vd.2D,Vn.4S
a → Vd.2D
b → Vn.4S
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
v7/A32/A64
Signed Maximum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMAXP Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Maximum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMAXP Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Maximum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMAXP Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Maximum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMAXP Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Maximum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMAXP Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Maximum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMAXP Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Floating-point Maximum Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, writes the larger of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMAXP Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
v7/A32/A64
Signed Maximum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMAXP Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
A64
Signed Maximum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMAXP Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
A64
Signed Maximum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMAXP Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
A64
Unsigned Maximum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMAXP Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
A64
Unsigned Maximum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMAXP Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
A64
Unsigned Maximum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMAXP Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
A64
Floating-point Maximum Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, writes the larger of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMAXP Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
A64
Floating-point Maximum Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, writes the larger of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMAXP Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
A64
Signed Minimum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMINP Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Minimum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMINP Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Signed Minimum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMINP Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Minimum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMINP Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Minimum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMINP Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Unsigned Minimum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMINP Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
v7/A32/A64
Floating-point Minimum Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, writes the smaller of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMINP Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
v7/A32/A64
Signed Minimum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMINP Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
A64
Signed Minimum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMINP Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
A64
Signed Minimum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMINP Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
A64
Unsigned Minimum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMINP Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
A64
Unsigned Minimum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMINP Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
A64
Unsigned Minimum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMINP Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
A64
Floating-point Minimum Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, writes the smaller of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMINP Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
A64
Floating-point Minimum Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, writes the smaller of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMINP Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
A64
Floating-point Maximum Number Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMAXNMP Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Floating-point Maximum Number Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMAXNMP Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Floating-point Maximum Number Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMAXNMP Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Floating-point Minimum Number Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of floating-point values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMINNMP Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Floating-point Minimum Number Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of floating-point values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMINNMP Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Floating-point Minimum Number Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of floating-point values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMINNMP Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Dd,Vn.2D
a → Vn.2D
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Dd,Vn.2D
a → Vn.2D
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Floating-point Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FADDP Sd,Vn.2S
a → Vn.2S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPAdd(element1, element2, FPCR); V[d] = result;
A64
Floating-point Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FADDP Dd,Vn.2D
a → Vn.2D
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPAdd(element1, element2, FPCR); V[d] = result;
A64
Floating-point Maximum Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, writes the larger of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMAXP Sd,Vn.2S
a → Vn.2S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
A64
Floating-point Maximum Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, writes the larger of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMAXP Dd,Vn.2D
a → Vn.2D
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
A64
Floating-point Minimum Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, writes the smaller of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMINP Sd,Vn.2S
a → Vn.2S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
A64
Floating-point Minimum Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, writes the smaller of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMINP Dd,Vn.2D
a → Vn.2D
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
A64
Floating-point Maximum Number Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMAXNMP Sd,Vn.2S
a → Vn.2S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Floating-point Maximum Number Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMAXNMP Dd,Vn.2D
a → Vn.2D
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Floating-point Minimum Number Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of floating-point values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMINNMP Sd,Vn.2S
a → Vn.2S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Floating-point Minimum Number Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of floating-point values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMINNMP Dd,Vn.2D
a → Vn.2D
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Add across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register.
ADDV Bd,Vn.8B
a → Vn.8B
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; V[d] = Reduce(ReduceOp_ADD, operand, esize);
A64
Add across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register.
ADDV Bd,Vn.16B
a → Vn.16B
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; V[d] = Reduce(ReduceOp_ADD, operand, esize);
A64
Add across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register.
ADDV Hd,Vn.4H
a → Vn.4H
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; V[d] = Reduce(ReduceOp_ADD, operand, esize);
A64
Add across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register.
ADDV Hd,Vn.8H
a → Vn.8H
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; V[d] = Reduce(ReduceOp_ADD, operand, esize);
A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
a → Vm.2S
Vd.S[0] → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Add across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register.
ADDV Sd,Vn.4S
a → Vn.4S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; V[d] = Reduce(ReduceOp_ADD, operand, esize);
A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Dd,Vn.2D
a → Vn.2D
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Add across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register.
ADDV Bd,Vn.8B
a → Vn.8B
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; V[d] = Reduce(ReduceOp_ADD, operand, esize);
A64
Add across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register.
ADDV Bd,Vn.16B
a → Vn.16B
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; V[d] = Reduce(ReduceOp_ADD, operand, esize);
A64
Add across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register.
ADDV Hd,Vn.4H
a → Vn.4H
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; V[d] = Reduce(ReduceOp_ADD, operand, esize);
A64
Add across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register.
ADDV Hd,Vn.8H
a → Vn.8H
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; V[d] = Reduce(ReduceOp_ADD, operand, esize);
A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
a → Vm.2S
Vd.S[0] → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Add across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register.
ADDV Sd,Vn.4S
a → Vn.4S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; V[d] = Reduce(ReduceOp_ADD, operand, esize);
A64
Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register.
ADDP Dd,Vn.2D
a → Vn.2D
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; Elem[result, e, esize] = element1 + element2; V[d] = result;
A64
Floating-point Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FADDP Sd,Vn.2S
a → Vn.2S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPAdd(element1, element2, FPCR); V[d] = result;
A64
Floating-point Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FADDP Vt.4S,Vn.4S,Vm.4S FADDP Sd,Vt.2S
a → Vn.4S
a → Vm.4S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPAdd(element1, element2, FPCR); V[d] = result;
A64
Floating-point Add Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, adds each pair of values together, places the result into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FADDP Dd,Vn.2D
a → Vn.2D
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, esize] = FPAdd(element1, element2, FPCR); V[d] = result;
A64
Signed Add Long across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register. The destination scalar is twice as long as the source vector elements. All the values in this instruction are signed integer values.
SADDLV Hd,Vn.8B
a → Vn.8B
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer sum; sum = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 sum = sum + Int(Elem[operand, e, esize], unsigned); V[d] = sum<2*esize-1:0>;
A64
Signed Add Long across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register. The destination scalar is twice as long as the source vector elements. All the values in this instruction are signed integer values.
SADDLV Hd,Vn.16B
a → Vn.16B
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer sum; sum = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 sum = sum + Int(Elem[operand, e, esize], unsigned); V[d] = sum<2*esize-1:0>;
A64
Signed Add Long across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register. The destination scalar is twice as long as the source vector elements. All the values in this instruction are signed integer values.
SADDLV Sd,Vn.4H
a → Vn.4H
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer sum; sum = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 sum = sum + Int(Elem[operand, e, esize], unsigned); V[d] = sum<2*esize-1:0>;
A64
Signed Add Long across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register. The destination scalar is twice as long as the source vector elements. All the values in this instruction are signed integer values.
SADDLV Sd,Vn.8H
a → Vn.8H
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer sum; sum = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 sum = sum + Int(Elem[operand, e, esize], unsigned); V[d] = sum<2*esize-1:0>;
A64
Signed Add Long Pairwise. This instruction adds pairs of adjacent signed integer values from the vector in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
SADDLP Vd.1D,Vn.2S
a → Vn.2S
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
A64
Signed Add Long across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register. The destination scalar is twice as long as the source vector elements. All the values in this instruction are signed integer values.
SADDLV Dd,Vn.4S
a → Vn.4S
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer sum; sum = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 sum = sum + Int(Elem[operand, e, esize], unsigned); V[d] = sum<2*esize-1:0>;
A64
Unsigned sum Long across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register. The destination scalar is twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UADDLV Hd,Vn.8B
a → Vn.8B
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer sum; sum = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 sum = sum + Int(Elem[operand, e, esize], unsigned); V[d] = sum<2*esize-1:0>;
A64
Unsigned sum Long across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register. The destination scalar is twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UADDLV Hd,Vn.16B
a → Vn.16B
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer sum; sum = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 sum = sum + Int(Elem[operand, e, esize], unsigned); V[d] = sum<2*esize-1:0>;
A64
Unsigned sum Long across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register. The destination scalar is twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UADDLV Sd,Vn.4H
a → Vn.4H
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer sum; sum = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 sum = sum + Int(Elem[operand, e, esize], unsigned); V[d] = sum<2*esize-1:0>;
A64
Unsigned sum Long across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register. The destination scalar is twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UADDLV Sd,Vn.8H
a → Vn.8H
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer sum; sum = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 sum = sum + Int(Elem[operand, e, esize], unsigned); V[d] = sum<2*esize-1:0>;
A64
Unsigned Add Long Pairwise. This instruction adds pairs of adjacent unsigned integer values from the vector in the source SIMD&FP register, places the result into a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the source vector elements.
UADDLP Vd.1D,Vn.2S
a → Vn.2S
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(2*esize) sum; integer op1; integer op2; result = if acc then V[d] else Zeros(); for e = 0 to elements-1 op1 = Int(Elem[operand, 2*e+0, esize], unsigned); op2 = Int(Elem[operand, 2*e+1, esize], unsigned); sum = (op1+op2)<2*esize-1:0>; Elem[result, e, 2*esize] = Elem[result, e, 2*esize] + sum; V[d] = result;
A64
Unsigned sum Long across Vector. This instruction adds every vector element in the source SIMD&FP register together, and writes the scalar result to the destination SIMD&FP register. The destination scalar is twice as long as the source vector elements. All the values in this instruction are unsigned integer values.
UADDLV Dd,Vn.4S
a → Vn.4S
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer sum; sum = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 sum = sum + Int(Elem[operand, e, esize], unsigned); V[d] = sum<2*esize-1:0>;
A64
Signed Maximum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the largest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SMAXV Bd,Vn.8B
a → Vn.8B
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Signed Maximum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the largest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SMAXV Bd,Vn.16B
a → Vn.16B
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Signed Maximum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the largest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SMAXV Hd,Vn.4H
a → Vn.4H
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Signed Maximum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the largest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SMAXV Hd,Vn.8H
a → Vn.8H
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Signed Maximum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMAXP Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
a → Vm.2S
Vd.S[0] → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
A64
Signed Maximum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the largest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SMAXV Sd,Vn.4S
a → Vn.4S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Unsigned Maximum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the largest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UMAXV Bd,Vn.8B
a → Vn.8B
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Unsigned Maximum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the largest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UMAXV Bd,Vn.16B
a → Vn.16B
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Unsigned Maximum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the largest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UMAXV Hd,Vn.4H
a → Vn.4H
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Unsigned Maximum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the largest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UMAXV Hd,Vn.8H
a → Vn.8H
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Unsigned Maximum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMAXP Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
a → Vm.2S
Vd.S[0] → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
A64
Unsigned Maximum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the largest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UMAXV Sd,Vn.4S
a → Vn.4S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Floating-point Maximum Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, writes the larger of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMAXP Sd,Vn.2S
a → Vn.2S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
A64
Floating-point Maximum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the largest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMAXV Sd,Vn.4S
a → Vn.4S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; V[d] = Reduce(ReduceOp_FMAX, operand, esize);
A64
Floating-point Maximum Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, writes the larger of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMAXP Dd,Vn.2D
a → Vn.2D
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
A64
Signed Minimum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the smallest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SMINV Bd,Vn.8B
a → Vn.8B
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Signed Minimum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the smallest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SMINV Bd,Vn.16B
a → Vn.16B
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Signed Minimum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the smallest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SMINV Hd,Vn.4H
a → Vn.4H
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Signed Minimum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the smallest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SMINV Hd,Vn.8H
a → Vn.8H
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Signed Minimum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of signed integer values into a vector, and writes the vector to the destination SIMD&FP register.
SMINP Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
a → Vm.2S
Vd.S[0] → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
A64
Signed Minimum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the smallest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are signed integer values.
SMINV Sd,Vn.4S
a → Vn.4S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Unsigned Minimum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the smallest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UMINV Bd,Vn.8B
a → Vn.8B
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Unsigned Minimum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the smallest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UMINV Bd,Vn.16B
a → Vn.16B
Bd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Unsigned Minimum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the smallest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UMINV Hd,Vn.4H
a → Vn.4H
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Unsigned Minimum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the smallest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UMINV Hd,Vn.8H
a → Vn.8H
Hd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Unsigned Minimum Pairwise. This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of unsigned integer values into a vector, and writes the vector to the destination SIMD&FP register.
UMINP Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
a → Vm.2S
Vd.S[0] → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; integer element1; integer element2; integer maxmin; for e = 0 to elements-1 element1 = Int(Elem[concat, 2*e, esize], unsigned); element2 = Int(Elem[concat, (2*e)+1, esize], unsigned); maxmin = if minimum then Min(element1, element2) else Max(element1, element2); Elem[result, e, esize] = maxmin<esize-1:0>; V[d] = result;
A64
Unsigned Minimum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the smallest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are unsigned integer values.
UMINV Sd,Vn.4S
a → Vn.4S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; integer maxmin; integer element; maxmin = Int(Elem[operand, 0, esize], unsigned); for e = 1 to elements-1 element = Int(Elem[operand, e, esize], unsigned); maxmin = if min then Min(maxmin, element) else Max(maxmin, element); V[d] = maxmin<esize-1:0>;
A64
Floating-point Minimum Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, writes the smaller of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMINP Sd,Vn.2S
a → Vn.2S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
A64
Floating-point Minimum across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the smallest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMINV Sd,Vn.4S
a → Vn.4S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; V[d] = Reduce(ReduceOp_FMIN, operand, esize);
A64
Floating-point Minimum Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements from the concatenated vector, writes the smaller of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMINP Dd,Vn.2D
a → Vn.2D
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMin(element1, element2, FPCR); else Elem[result, e, esize] = FPMax(element1, element2, FPCR); V[d] = result;
A64
Floating-point Maximum Number Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMAXNMP Sd,Vn.2S
a → Vn.2S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Floating-point Maximum Number across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the largest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMAXNMV Sd,Vn.4S
a → Vn.4S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; V[d] = Reduce(ReduceOp_FMAXNUM, operand, esize);
A64
Floating-point Maximum Number Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the largest of each pair of values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMAXNMP Dd,Vn.2D
a → Vn.2D
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Floating-point Minimum Number Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of floating-point values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMINNMP Sd,Vn.2S
a → Vn.2S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Floating-point Minimum Number across Vector. This instruction compares all the vector elements in the source SIMD&FP register, and writes the smallest of the values as a scalar to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMINNMV Sd,Vn.4S
a → Vn.4S
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; V[d] = Reduce(ReduceOp_FMINNUM, operand, esize);
A64
Floating-point Minimum Number Pairwise (vector). This instruction creates a vector by concatenating the vector elements of the first source SIMD&FP register after the vector elements of the second source SIMD&FP register, reads each pair of adjacent vector elements in the two source SIMD&FP registers, writes the smallest of each pair of floating-point values into a vector, and writes the vector to the destination SIMD&FP register. All the values in this instruction are floating-point values.
FMINNMP Dd,Vn.2D
a → Vn.2D
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; bits(2*datasize) concat = operand2:operand1; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 if pair then element1 = Elem[concat, 2*e, esize]; element2 = Elem[concat, (2*e)+1, esize]; else element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if minimum then Elem[result, e, esize] = FPMinNum(element1, element2, FPCR); else Elem[result, e, esize] = FPMaxNum(element1, element2, FPCR); V[d] = result;
A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.8B,Vn.8B,Vm.8B,#n
a → Vn.8B
b → Vm.8B
0 << n << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.16B,Vn.16B,Vm.16B,#n
a → Vn.16B
b → Vm.16B
0 << n << 15
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.8B,Vn.8B,Vm.8B,#(n<<1)
a → Vn.8B
b → Vm.8B
0 << n << 3
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.16B,Vn.16B,Vm.16B,#(n<<1)
a → Vn.16B
b → Vm.16B
0 << n << 7
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.8B,Vn.8B,Vm.8B,#(n<<2)
a → Vn.8B
b → Vm.8B
0 << n << 1
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.16B,Vn.16B,Vm.16B,#(n<<2)
a → Vn.16B
b → Vm.16B
0 << n << 3
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.8B,Vn.8B,Vm.8B,#(n<<3)
a → Vn.8B
b → Vm.8B
0 << n << 0
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.16B,Vn.16B,Vm.16B,#(n<<3)
a → Vn.16B
b → Vm.16B
0 << n << 1
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.8B,Vn.8B,Vm.8B,#n
a → Vn.8B
b → Vm.8B
0 << n << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.16B,Vn.16B,Vm.16B,#n
a → Vn.16B
b → Vm.16B
0 << n << 15
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.8B,Vn.8B,Vm.8B,#(n<<1)
a → Vn.8B
b → Vm.8B
0 << n << 3
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.16B,Vn.16B,Vm.16B,#(n<<1)
a → Vn.16B
b → Vm.16B
0 << n << 7
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.8B,Vn.8B,Vm.8B,#(n<<2)
a → Vn.8B
b → Vm.8B
0 << n << 1
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.16B,Vn.16B,Vm.16B,#(n<<2)
a → Vn.16B
b → Vm.16B
0 << n << 3
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.8B,Vn.8B,Vm.8B,#(n<<3)
a → Vn.8B
b → Vm.8B
0 << n << 0
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.16B,Vn.16B,Vm.16B,#(n<<3)
a → Vn.16B
b → Vm.16B
0 << n << 1
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.8B,Vn.8B,Vm.8B,#(n<<3)
a → Vn.8B
b → Vm.8B
0 << n << 0
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.16B,Vn.16B,Vm.16B,#(n<<3)
a → Vn.16B
b → Vm.16B
0 << n << 1
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.8B,Vn.8B,Vm.8B,#(n<<2)
a → Vn.8B
b → Vm.8B
0 << n << 1
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.16B,Vn.16B,Vm.16B,#(n<<2)
a → Vn.16B
b → Vm.16B
0 << n << 3
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.8B,Vn.8B,Vm.8B,#(n<<3)
a → Vn.8B
b → Vm.8B
0 << n << 0
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.16B,Vn.16B,Vm.16B,#(n<<3)
a → Vn.16B
b → Vm.16B
0 << n << 1
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.8B,Vn.8B,Vm.8B,#n
a → Vn.8B
b → Vm.8B
0 << n << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.16B,Vn.16B,Vm.16B,#n
a → Vn.16B
b → Vm.16B
0 << n << 15
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.8B,Vn.8B,Vm.8B,#(n<<1)
a → Vn.8B
b → Vm.8B
0 << n << 3
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Extract vector from pair of vectors. This instruction extracts the lowest vector elements from the second source SIMD&FP register and the highest vector elements from the first source SIMD&FP register, concatenates the results into a vector, and writes the vector to the destination SIMD&FP register vector. The index value specifies the lowest vector element to extract from the first source register, and consecutive elements are extracted from the first, then second, source registers until the destination vector is filled.
EXT Vd.16B,Vn.16B,Vm.16B,#(n<<1)
a → Vn.16B
b → Vm.16B
0 << n << 7
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) hi = V[m]; bits(datasize) lo = V[n]; bits(datasize*2) concat = hi:lo; V[d] = concat<position+datasize-1:position>;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.8B,Vn.8B
vec → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.16B,Vn.16B
vec → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.4H,Vn.4H
vec → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.8H,Vn.8H
vec → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.2S,Vn.2S
vec → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.4S,Vn.4S
vec → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.8B,Vn.8B
vec → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.16B,Vn.16B
vec → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.4H,Vn.4H
vec → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.8H,Vn.8H
vec → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.2S,Vn.2S
vec → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.4S,Vn.4S
vec → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.2S,Vn.2S
vec → Vn.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.4S,Vn.4S
vec → Vn.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.8B,Vn.8B
vec → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.16B,Vn.16B
vec → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.4H,Vn.4H
vec → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 64-bit doublewords (vector). This instruction reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV64 Vd.8H,Vn.8H
vec → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 32-bit words (vector). This instruction reverses the order of 8-bit or 16-bit elements in each word of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV32 Vd.8B,Vn.8B
vec → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 32-bit words (vector). This instruction reverses the order of 8-bit or 16-bit elements in each word of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV32 Vd.16B,Vn.16B
vec → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 32-bit words (vector). This instruction reverses the order of 8-bit or 16-bit elements in each word of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV32 Vd.4H,Vn.4H
vec → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 32-bit words (vector). This instruction reverses the order of 8-bit or 16-bit elements in each word of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV32 Vd.8H,Vn.8H
vec → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 32-bit words (vector). This instruction reverses the order of 8-bit or 16-bit elements in each word of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV32 Vd.8B,Vn.8B
vec → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 32-bit words (vector). This instruction reverses the order of 8-bit or 16-bit elements in each word of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV32 Vd.16B,Vn.16B
vec → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 32-bit words (vector). This instruction reverses the order of 8-bit or 16-bit elements in each word of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV32 Vd.4H,Vn.4H
vec → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 32-bit words (vector). This instruction reverses the order of 8-bit or 16-bit elements in each word of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV32 Vd.8H,Vn.8H
vec → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 32-bit words (vector). This instruction reverses the order of 8-bit or 16-bit elements in each word of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV32 Vd.8B,Vn.8B
vec → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 32-bit words (vector). This instruction reverses the order of 8-bit or 16-bit elements in each word of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV32 Vd.16B,Vn.16B
vec → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 32-bit words (vector). This instruction reverses the order of 8-bit or 16-bit elements in each word of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV32 Vd.4H,Vn.4H
vec → Vn.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 32-bit words (vector). This instruction reverses the order of 8-bit or 16-bit elements in each word of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV32 Vd.8H,Vn.8H
vec → Vn.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 16-bit halfwords (vector). This instruction reverses the order of 8-bit elements in each halfword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV16 Vd.8B,Vn.8B
vec → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 16-bit halfwords (vector). This instruction reverses the order of 8-bit elements in each halfword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV16 Vd.16B,Vn.16B
vec → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 16-bit halfwords (vector). This instruction reverses the order of 8-bit elements in each halfword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV16 Vd.8B,Vn.8B
vec → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 16-bit halfwords (vector). This instruction reverses the order of 8-bit elements in each halfword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV16 Vd.16B,Vn.16B
vec → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 16-bit halfwords (vector). This instruction reverses the order of 8-bit elements in each halfword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV16 Vd.8B,Vn.8B
vec → Vn.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Reverse elements in 16-bit halfwords (vector). This instruction reverses the order of 8-bit elements in each halfword of the vector in the source SIMD&FP register, places the results into a vector, and writes the vector to the destination SIMD&FP register.
REV16 Vd.16B,Vn.16B
vec → Vn.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; integer element = 0; integer rev_element; for c = 0 to containers-1 rev_element = element + elements_per_container - 1; for e = 0 to elements_per_container-1 Elem[result, rev_element, esize] = Elem[operand, element, esize]; element = element + 1; rev_element = rev_element - 1; V[d] = result;
v7/A32/A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (primary). This instruction reads adjacent vector elements from the upper half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP2 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP2 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (primary). This instruction reads corresponding even-numbered vector elements from the two source SIMD&FP registers, starting at zero, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.2D,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN2 Vd.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B},Vm.8B
Vn → Zeros(64):a
b → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B},Vm.8B
Vn → Zeros(64):a
b → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B},Vm.8B
Vn → Zeros(64):a
b → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Bitwise Insert if False. This instruction inserts each bit from the first source SIMD&FP register into the destination SIMD&FP register if the corresponding bit of the second source SIMD&FP register is 0, otherwise leaves the bit in the destination register unchanged.
MOVI Vtmp.8B,#8 CMHS Vtmp.8B,Vm.8B,Vtmp.8B TBL Vtmp1.8B,{Vn.16B},Vm.8B BIF Vd.8B,Vtmp1.8B,Vtmp.8B
a → Vd
Vn → Zeros(64):b
c → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[d]; operand3 = NOT(V[m]); V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Insert if False. This instruction inserts each bit from the first source SIMD&FP register into the destination SIMD&FP register if the corresponding bit of the second source SIMD&FP register is 0, otherwise leaves the bit in the destination register unchanged.
MOVI Vtmp.8B,#8 CMHS Vtmp.8B,Vm.8B,Vtmp.8B TBL Vtmp1.8B,{Vn.16B},Vm.8B BIF Vd.8B,Vtmp1.8B,Vtmp.8B
a → Vd
Vn → Zeros(64):b
c → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[d]; operand3 = NOT(V[m]); V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Insert if False. This instruction inserts each bit from the first source SIMD&FP register into the destination SIMD&FP register if the corresponding bit of the second source SIMD&FP register is 0, otherwise leaves the bit in the destination register unchanged.
MOVI Vtmp.8B,#8 CMHS Vtmp.8B,Vm.8B,Vtmp.8B TBL Vtmp1.8B,{Vn.16B},Vm.8B BIF Vd.8B,Vtmp1.8B, Vtmp.8B
a → Vd
Vn → Zeros(64):b
c → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[d]; operand3 = NOT(V[m]); V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B},Vm.8B
Vn → a.val[1]:a.val[0]
b → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B},Vm.8B
Vn → a.val[1]:a.val[0]
b → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B},Vm.8B
Vn → a.val[1]:a.val[0]
b → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B,Vn+1.16B},Vm.8B
Vn → a.val[1]:a.val[0]
Vn+1 → Zeros(64):a.val[2]
b → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B,Vn+1.16B},Vm.8B
Vn → a.val[1]:a.val[0]
Vn+1 → Zeros(64):a.val[2]
b → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B,Vn+1.16B},Vm.8B
Vn → a.val[1]:a.val[0]
Vn+1 → Zeros(64):a.val[2]
b → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B,Vn+1.16B},Vm.8B
Vn → a.val[1]:a.val[0]
Vn+1 → a.val[3]:a.val[2]
b → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B,Vn+1.16B},Vm.8B
Vn → a.val[1]:a.val[0]
Vn+1 → a.val[3]:a.val[2]
b → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B,Vn+1.16B},Vm.8B
Vn → a.val[1]:a.val[0]
Vn+1 → a.val[3]:a.val[2]
b → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B},Vm.8B
a → Vd
Vn → b.val[1]:b.val[0]
c → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B},Vm.8B
a → Vd
Vn → b.val[1]:b.val[0]
c → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B},Vm.8B
a → Vd
Vn → b.val[1]:b.val[0]
c → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Bitwise Insert if False. This instruction inserts each bit from the first source SIMD&FP register into the destination SIMD&FP register if the corresponding bit of the second source SIMD&FP register is 0, otherwise leaves the bit in the destination register unchanged.
MOVI Vtmp.8B,#24 CMHS Vtmp.8B,Vm.8B,Vtmp.8B TBL Vtmp1.8B,{Vn.16B,Vn+1.16B},Vm.8 BIF Vd.8B,Vtmp1.8B,Vtmp.8B
a → Vd
Vn → b.val[1]:b.val[0]
Vn+1 → Zeros(64):b.val[2]
c → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[d]; operand3 = NOT(V[m]); V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Insert if False. This instruction inserts each bit from the first source SIMD&FP register into the destination SIMD&FP register if the corresponding bit of the second source SIMD&FP register is 0, otherwise leaves the bit in the destination register unchanged.
MOVI Vtmp.8B,#24 CMHS Vtmp.8B,Vm.8B,Vtmp.8B TBL Vtmp1.8B,{Vn.16B,Vn+1.16B},Vm.8B BIF Vd.8B,Vtmp1.8B,Vtmp.8B
a → Vd
Vn → b.val[1]:b.val[0]
Vn+1 → Zeros(64):b.val[2]
c → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[d]; operand3 = NOT(V[m]); V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Bitwise Insert if False. This instruction inserts each bit from the first source SIMD&FP register into the destination SIMD&FP register if the corresponding bit of the second source SIMD&FP register is 0, otherwise leaves the bit in the destination register unchanged.
MOVI Vtmp.8B,#24 CMHS Vtmp.8B,Vm.8B,Vtmp.8B TBL Vtmp1.8B,{Vn.16B,Vn+1.16B},Vm.8B BIF Vd.8B,Vtmp1.8B,Vtmp.8B
a → Vd
Vn → b.val[1]:b.val[0]
Vn+1 → Zeros(64):b.val[2]
c → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1; bits(datasize) operand3; bits(datasize) operand4 = V[n]; operand1 = V[d]; operand3 = NOT(V[m]); V[d] = operand1 EOR ((operand1 EOR operand4) AND operand3);
v7/A32/A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B,Vn+1.16B},Vm.8B
a → Vd
Vn → b.val[1]:b.val[0]
Vn+1 → b.val[3]:b.val[2]
c → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B,Vn+1.16B},Vm.8B
a → Vd
Vn → b.val[1]:b.val[0]
Vn+1 → b.val[3]:b.val[2]
c → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B,Vn+1.16B},Vm.8B
a → Vd
Vn → b.val[1]:b.val[0]
Vn+1 → b.val[3]:b.val[2]
c → Vm
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
v7/A32/A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B},Vm.8B
t → Vn.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.16B,{Vn.16B},Vm.16B
t → Vn.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B},Vm.8B
t → Vn.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.16B,{Vn.16B},Vm.16B
t → Vn.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B},Vm.8B
t → Vn.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.16B,{Vn.16B},Vm.16B
t → Vn.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B},Vm.8B
a → Vd.8B
t → Vn.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.16B,{Vn.16B},Vm.16B
a → Vd.16B
t → Vn.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B},Vm.8B
a → Vd.8B
t → Vn.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.16B,{Vn.16B},Vm.16B
a → Vd.16B
t → Vn.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B},Vm.8B
a → Vd.8B
t → Vn.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.16B,{Vn.16B},Vm.16B
a → Vd.16B
t → Vn.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B - Vn+1.16B},Vm.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.16B,{Vn.16B - Vn+1.16B},Vm.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B - Vn+1.16B},Vm.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.16B,{Vn.16B - Vn+1.16B},Vm.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B - Vn+1.16B},Vm.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.16B,{Vn.16B - Vn+1.16B},Vm.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B - Vn+2.16B},Vm.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.16B,{Vn.16B - Vn+2.16B},Vm.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B - Vn+2.16B},Vm.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.16B,{Vn.16B - Vn+2.16B},Vm.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B - Vn+2.16B},Vm.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.16B,{Vn.16B - Vn+2.16B},Vm.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B - Vn+3.16B},Vm.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
t.val[3] → Vn+3.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.16B,{Vn.16B - Vn+3.16B},Vm.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
t.val[3] → Vn+3.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B - Vn+3.16B},Vm.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
t.val[3] → Vn+3.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.16B,{Vn.16B - Vn+3.16B},Vm.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
t.val[3] → Vn+3.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.8B,{Vn.16B - Vn+3.16B},Vm.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
t.val[3] → Vn+3.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector Lookup. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the result for that lookup is 0. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBL Vd.16B,{Vn.16B - Vn+3.16B},Vm.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
t.val[3] → Vn+3.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B - Vn+1.16B},Vm.8B
a → Vd.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.16B,{Vn.16B - Vn+1.16B},Vm.16B
a → Vd.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B - Vn+1.16B},Vm.8B
a → Vd.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.16B,{Vn.16B - Vn+1.16B},Vm.16B
a → Vd.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B - Vn+1.16B},Vm.8B
a → Vd.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.16B,{Vn.16B - Vn+1.16B},Vm.16B
a → Vd.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B - Vn+2.16B},Vm.8B
a → Vd.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.16B,{Vn.16B - Vn+2.16B},Vm.16B
a → Vd.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B - Vn+2.16B},Vm.8B
a → Vd.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.16B,{Vn.16B - Vn+2.16B},Vm.16B
a → Vd.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B - Vn+2.16B},Vm.8B
a → Vd.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.16B,{Vn.16B - Vn+2.16B},Vm.16B
a → Vd.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B - Vn+3.16B},Vm.8B
a → Vd.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
t.val[3] → Vn+3.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.16B,{Vn.16B - Vn+3.16B},Vm.16B
a → Vd.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
t.val[3] → Vn+3.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B - Vn+3.16B},Vm.8B
a → Vd.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
t.val[3] → Vn+3.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.16B,{Vn.16B - Vn+3.16B},Vm.16B
a → Vd.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
t.val[3] → Vn+3.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.8B,{Vn.16B - Vn+3.16B},Vm.8B
a → Vd.8B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
t.val[3] → Vn+3.16B
idx → Vm.8B
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Table vector lookup extension. This instruction reads each value from the vector elements in the index source SIMD&FP register, uses each result as an index to perform a lookup in a table of bytes that is described by one to four source table SIMD&FP registers, places the lookup result in a vector, and writes the vector to the destination SIMD&FP register. If an index is out of range for the table, the existing value in the vector element of the destination register is left unchanged. If more than one source register is used to describe the table, the first source register describes the lowest bytes of the table.
TBX Vd.16B,{Vn.16B - Vn+3.16B},Vm.16B
a → Vd.16B
t.val[0] → Vn.16B
t.val[1] → Vn+1.16B
t.val[2] → Vn+2.16B
t.val[3] → Vn+3.16B
idx → Vm.16B
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(datasize) indices = V[m]; bits(128*regs) table = Zeros(); bits(datasize) result; integer index; // Create table from registers for i = 0 to regs-1 table<128*i+127:128*i> = V[n]; n = (n + 1) MOD 32; result = if is_tbl then Zeros() else V[d]; for i = 0 to elements-1 index = UInt(Elem[indices, i, 8]); if index < 16 * regs then Elem[result, i, 8] = Elem[table, index, 8]; V[d] = result;
A64
Unsigned Move vector element to general-purpose register. This instruction reads the unsigned integer from the source SIMD&FP register, zero-extends it to form a 32-bit or 64-bit value, and writes the result to the destination general-purpose register.
UMOV Rd,Vn.B[lane]
v → Vn.8B
0 << lane << 7
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = ZeroExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Unsigned Move vector element to general-purpose register. This instruction reads the unsigned integer from the source SIMD&FP register, zero-extends it to form a 32-bit or 64-bit value, and writes the result to the destination general-purpose register.
UMOV Rd,Vn.H[lane]
v → Vn.4H
0 << lane << 3
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = ZeroExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Unsigned Move vector element to general-purpose register. This instruction reads the unsigned integer from the source SIMD&FP register, zero-extends it to form a 32-bit or 64-bit value, and writes the result to the destination general-purpose register.
UMOV Rd,Vn.S[lane]
v → Vn.2S
0 << lane << 1
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = ZeroExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Unsigned Move vector element to general-purpose register. This instruction reads the unsigned integer from the source SIMD&FP register, zero-extends it to form a 32-bit or 64-bit value, and writes the result to the destination general-purpose register.
UMOV Rd,Vn.D[lane]
v → Vn.1D
0 << lane << 0
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = ZeroExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Unsigned Move vector element to general-purpose register. This instruction reads the unsigned integer from the source SIMD&FP register, zero-extends it to form a 32-bit or 64-bit value, and writes the result to the destination general-purpose register.
UMOV Rd,Vn.D[lane]
v → Vn.1D
0 << lane << 0
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = ZeroExtend(Elem[operand, index, esize], datasize);
A32/A64
Signed Move vector element to general-purpose register. This instruction reads the signed integer from the source SIMD&FP register, sign-extends it to form a 32-bit or 64-bit value, and writes the result to destination general-purpose register.
SMOV Rd,Vn.B[lane]
v → Vn.8B
0 << lane << 7
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = SignExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Signed Move vector element to general-purpose register. This instruction reads the signed integer from the source SIMD&FP register, sign-extends it to form a 32-bit or 64-bit value, and writes the result to destination general-purpose register.
SMOV Rd,Vn.H[lane]
v → Vn.4H
0 << lane << 3
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = SignExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Signed Move vector element to general-purpose register. This instruction reads the signed integer from the source SIMD&FP register, sign-extends it to form a 32-bit or 64-bit value, and writes the result to destination general-purpose register.
SMOV Rd,Vn.S[lane]
v → Vn.2S
0 << lane << 1
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = SignExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Unsigned Move vector element to general-purpose register. This instruction reads the unsigned integer from the source SIMD&FP register, zero-extends it to form a 32-bit or 64-bit value, and writes the result to the destination general-purpose register.
UMOV Rd,Vn.D[lane]
v → Vn.1D
0 << lane << 0
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = ZeroExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Unsigned Move vector element to general-purpose register. This instruction reads the unsigned integer from the source SIMD&FP register, zero-extends it to form a 32-bit or 64-bit value, and writes the result to the destination general-purpose register.
UMOV Rd,Vn.B[lane]
v → Vn.8B
0 << lane << 7
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = ZeroExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Unsigned Move vector element to general-purpose register. This instruction reads the unsigned integer from the source SIMD&FP register, zero-extends it to form a 32-bit or 64-bit value, and writes the result to the destination general-purpose register.
UMOV Rd,Vn.H[lane]
v → Vn.4H
0 << lane << 3
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = ZeroExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Sd,Vn.S[lane]
v → Vn.2S
0 << lane << 1
Sd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane]
v → Vn.1D
0 << lane << 0
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Unsigned Move vector element to general-purpose register. This instruction reads the unsigned integer from the source SIMD&FP register, zero-extends it to form a 32-bit or 64-bit value, and writes the result to the destination general-purpose register.
UMOV Rd,Vn.B[lane]
v → Vn.16B
0 << lane << 15
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = ZeroExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Unsigned Move vector element to general-purpose register. This instruction reads the unsigned integer from the source SIMD&FP register, zero-extends it to form a 32-bit or 64-bit value, and writes the result to the destination general-purpose register.
UMOV Rd,Vn.H[lane]
v → Vn.8H
0 << lane << 7
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = ZeroExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Unsigned Move vector element to general-purpose register. This instruction reads the unsigned integer from the source SIMD&FP register, zero-extends it to form a 32-bit or 64-bit value, and writes the result to the destination general-purpose register.
UMOV Rd,Vn.S[lane]
v → Vn.4S
0 << lane << 3
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = ZeroExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Unsigned Move vector element to general-purpose register. This instruction reads the unsigned integer from the source SIMD&FP register, zero-extends it to form a 32-bit or 64-bit value, and writes the result to the destination general-purpose register.
UMOV Rd,Vn.D[lane]
v → Vn.2D
0 << lane << 1
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = ZeroExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Unsigned Move vector element to general-purpose register. This instruction reads the unsigned integer from the source SIMD&FP register, zero-extends it to form a 32-bit or 64-bit value, and writes the result to the destination general-purpose register.
UMOV Rd,Vn.D[lane]
v → Vn.2D
0 << lane << 1
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = ZeroExtend(Elem[operand, index, esize], datasize);
A32/A64
Signed Move vector element to general-purpose register. This instruction reads the signed integer from the source SIMD&FP register, sign-extends it to form a 32-bit or 64-bit value, and writes the result to destination general-purpose register.
SMOV Rd,Vn.B[lane]
v → Vn.16B
0 << lane << 15
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = SignExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Signed Move vector element to general-purpose register. This instruction reads the signed integer from the source SIMD&FP register, sign-extends it to form a 32-bit or 64-bit value, and writes the result to destination general-purpose register.
SMOV Rd,Vn.H[lane]
v → Vn.8H
0 << lane << 7
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = SignExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Signed Move vector element to general-purpose register. This instruction reads the signed integer from the source SIMD&FP register, sign-extends it to form a 32-bit or 64-bit value, and writes the result to destination general-purpose register.
SMOV Rd,Vn.S[lane]
v → Vn.4S
0 << lane << 3
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = SignExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Unsigned Move vector element to general-purpose register. This instruction reads the unsigned integer from the source SIMD&FP register, zero-extends it to form a 32-bit or 64-bit value, and writes the result to the destination general-purpose register.
UMOV Rd,Vn.D[lane]
v → Vn.2D
0 << lane << 1
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = ZeroExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Unsigned Move vector element to general-purpose register. This instruction reads the unsigned integer from the source SIMD&FP register, zero-extends it to form a 32-bit or 64-bit value, and writes the result to the destination general-purpose register.
UMOV Rd,Vn.B[lane]
v → Vn.16B
0 << lane << 15
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = ZeroExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Unsigned Move vector element to general-purpose register. This instruction reads the unsigned integer from the source SIMD&FP register, zero-extends it to form a 32-bit or 64-bit value, and writes the result to the destination general-purpose register.
UMOV Rd,Vn.H[lane]
v → Vn.8H
0 << lane << 7
Rd → result
CheckFPAdvSIMDEnabled64(); bits(idxdsize) operand = V[n]; X[d] = ZeroExtend(Elem[operand, index, esize], datasize);
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Hd,Vn.H[lane]
v → Vn.4H
0 << lane << 3
Hd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Hd,Vn.H[lane]
v → Vn.8H
0 << lane << 7
Hd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Sd,Vn.S[lane]
v → Vn.4S
0 << lane << 3
Sd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
v7/A32/A64
Duplicate general-purpose register to vector. This instruction duplicates the contents of the source general-purpose register into a scalar or each element in a vector, and writes the result to the SIMD&FP destination register.
DUP Dd,Vn.D[lane]
v → Vn.2D
0 << lane << 1
Dd → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(datasize) result; for e = 0 to elements-1 Elem[result, e, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane],Rn
a → Rn
v → Vd.8B
0 << lane << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane],Rn
a → Rn
v → Vd.4H
0 << lane << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane],Rn
a → Rn
v → Vd.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[lane],Rn
a → Rn
v → Vd.1D
0 << lane << 0
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[lane],Rn
a → Rn
v → Vd.1D
0 << lane << 0
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane],Rn
a → Rn
v → Vd.8B
0 << lane << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane],Rn
a → Rn
v → Vd.4H
0 << lane << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane],Rn
a → Rn
v → Vd.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[lane],Rn
a → Rn
v → Vd.1D
0 << lane << 0
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane],Rn
a → Rn
v → Vd.8B
0 << lane << 7
Vd.8B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane],Rn
a → Rn
v → Vd.4H
0 << lane << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane],Vn.H[0]
a → VnH
v → Vd.4H
0 << lane << 3
Vd.4H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane],Vn.H[0]
a → VnH
v → Vd.8H
0 << lane << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane],Rn
a → Rn
v → Vd.2S
0 << lane << 1
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[lane],Rn
a → Rn
v → Vd.1D
0 << lane << 0
Vd.1D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane],Rn
a → Rn
v → Vd.16B
0 << lane << 15
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane],Rn
a → Rn
v → Vd.8H
0 << lane << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane],Rn
a → Rn
v → Vd.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[lane],Rn
a → Rn
v → Vd.2D
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[lane],Rn
a → Rn
v → Vd.2D
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane],Rn
a → Rn
v → Vd.16B
0 << lane << 15
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane],Rn
a → Rn
v → Vd.8H
0 << lane << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane],Rn
a → Rn
v → Vd.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[lane],Rn
a → Rn
v → Vd.2D
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.B[lane],Rn
a → Rn
v → Vd.16B
0 << lane << 15
Vd.16B → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.H[lane],Rn
a → Rn
v → Vd.8H
0 << lane << 7
Vd.8H → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.S[lane],Rn
a → Rn
v → Vd.4S
0 << lane << 3
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
v7/A32/A64
Insert vector element from general-purpose register. This instruction copies the contents of the source general-purpose register to the specified vector element in the destination SIMD&FP register.
INS Vd.D[lane],Rn
a → Rn
v → Vd.2D
0 << lane << 1
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(esize) element = X[n]; bits(128) result; result = V[d]; Elem[result, index, esize] = element; V[d] = result;
A64
Floating-point Reciprocal exponent (scalar). This instruction finds an approximate reciprocal exponent for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FRECPX Sd,Sn
a → Sn
Sd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRecpX(element, FPCR); V[d] = result;
A64
Floating-point Reciprocal exponent (scalar). This instruction finds an approximate reciprocal exponent for each vector element in the source SIMD&FP register, places the result in a vector, and writes the vector to the destination SIMD&FP register.
FRECPX Dd,Dn
a → Dn
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand = V[n]; bits(datasize) result; bits(esize) element; for e = 0 to elements-1 element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRecpX(element, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Vd.2S,Vn.2S,Vm.S[0]
a → Vd.2S
b → Vn.2S
n → Vm.S[0]
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
v7/A32/A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Vd.4S,Vn.4S,Vm.S[0]
a → Vd.4S
b → Vn.4S
n → Vm.S[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
v7/A32/A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Vd.2S,Vn.2S,Vm.S[0]
a → Vd.2S
b → Vn.2S
n → Vm.S[0]
Vd.2S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Vd.4S,Vn.4S,Vm.S[0]
a → Vd.4S
b → Vn.4S
n → Vm.S[0]
Vd.4S → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Add (scalar). This instruction multiplies the values of the first two SIMD&FP source registers, adds the product to the value of the third SIMD&FP source register, and writes the result to the SIMD&FP destination register.
FMADD Dd,Dn,Dm,Da
a → Da
b → Dn
n → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) result; bits(datasize) operanda = V[a]; bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; result = FPMulAdd(operanda, operand1, operand2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Add to accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, adds the product to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLA Vd.2D,Vn.2D,Vm.D[0]
a → Vd.2D
b → Vn.2D
n → Vm.D[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Floating-point Fused Multiply-Subtract (scalar). This instruction multiplies the values of the first two SIMD&FP source registers, negates the product, adds that to the value of the third SIMD&FP source register, and writes the result to the SIMD&FP destination register.
FMSUB Dd,Dn,Dm,Da
a → Da
b → Dn
n → Dm
Dd → result
CheckFPAdvSIMDEnabled64(); bits(datasize) result; bits(datasize) operanda = V[a]; bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; operand1 = FPNeg(operand1); result = FPMulAdd(operanda, operand1, operand2, FPCR); V[d] = result;
A64
Floating-point fused Multiply-Subtract from accumulator (vector). This instruction multiplies corresponding floating-point values in the vectors in the two source SIMD&FP registers, negates the product, adds the result to the corresponding vector element of the destination SIMD&FP register, and writes the result to the destination SIMD&FP register.
FMLS Vd.2D,Vn.2D,Vm.D[0]
a → Vd.2D
b → Vn.2D
n → Vm.D[0]
Vd.2D → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) operand3 = V[d]; bits(datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; if sub_op then element1 = FPNeg(element1); Elem[result, e, esize] = FPMulAdd(Elem[operand3, e, esize], element1, element2, FPCR); V[d] = result;
A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.8B,Vn.8B,Vm.8B TRN2 Vd2.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd1.8B → result.val[0] Vd2.8B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.4H,Vn.4H,Vm.4H TRN2 Vd2.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd1.4H → result.val[0] Vd2.4H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.8B,Vn.8B,Vm.8B TRN2 Vd2.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd1.8B → result.val[0] Vd2.8B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.4H,Vn.4H,Vm.4H TRN2 Vd2.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd1.4H → result.val[0] Vd2.4H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.8B,Vn.8B,Vm.8B TRN2 Vd2.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd1.8B → result.val[0] Vd2.8B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.4H,Vn.4H,Vm.4H TRN2 Vd2.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd1.4H → result.val[0] Vd2.4H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.2S,Vn.2S,Vm.2S TRN2 Vd2.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd1.2S → result.val[0] Vd2.2S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.2S,Vn.2S,Vm.2S TRN2 Vd2.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd1.2S → result.val[0] Vd2.2S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.2S,Vn.2S,Vm.2S TRN2 Vd2.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd1.2S → result.val[0] Vd2.2S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.16B,Vn.16B,Vm.16B TRN2 Vd2.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd1.16B → result.val[0] Vd2.16B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.8H,Vn.8H,Vm.8H TRN2 Vd2.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd1.8H → result.val[0] Vd2.8H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.4S,Vn.4S,Vm.4S TRN2 Vd2.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd1.4S → result.val[0] Vd2.4S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.4S,Vn.4S,Vm.4S TRN2 Vd2.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd1.4S → result.val[0] Vd2.4S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.16B,Vn.16B,Vm.16B TRN2 Vd2.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd1.16B → result.val[0] Vd2.16B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.8H,Vn.8H,Vm.8H TRN2 Vd2.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd1.8H → result.val[0] Vd2.8H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.4S,Vn.4S,Vm.4S TRN2 Vd2.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd1.4S → result.val[0] Vd2.4S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.16B,Vn.16B,Vm.16B TRN2 Vd2.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd1.16B → result.val[0] Vd2.16B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Transpose vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places each result into consecutive elements of a vector, and writes the vector to the destination SIMD&FP register. Vector elements from the first source register are placed into even-numbered elements of the destination vector, starting at zero, while vector elements from the second source register are placed into odd-numbered elements of the destination vector.
TRN1 Vd1.8H,Vn.8H,Vm.8H TRN2 Vd2.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd1.8H → result.val[0] Vd2.8H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, 2*p+part, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, 2*p+part, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.8B,Vn.8B,Vm.8B ZIP2 Vd2.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd1.8B → result.val[0] Vd2.8B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.4H,Vn.4H,Vm.4H ZIP2 Vd2.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd1.4H → result.val[0] Vd2.4H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.8B,Vn.8B,Vm.8B ZIP2 Vd2.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd1.8B → result.val[0] Vd2.8B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.4H,Vn.4H,Vm.4H ZIP2 Vd2.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd1.4H → result.val[0] Vd2.4H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.8B,Vn.8B,Vm.8B ZIP2 Vd2.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd1.8B → result.val[0] Vd2.8B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.4H,Vn.4H,Vm.4H ZIP2 Vd2.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd1.4H → result.val[0] Vd2.4H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.2S,Vn.2S,Vm.2S ZIP2 Vd2.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd1.2S → result.val[0] Vd2.2S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.2S,Vn.2S,Vm.2S ZIP2 Vd2.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd1.2S → result.val[0] Vd2.2S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.2S,Vn.2S,Vm.2S ZIP2 Vd2.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd1.2S → result.val[0] Vd2.2S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.16B,Vn.16B,Vm.16B ZIP2 Vd2.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd1.16B → result.val[0] Vd2.16B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.8H,Vn.8H,Vm.8H ZIP2 Vd2.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd1.8H → result.val[0] Vd2.8H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.4S,Vn.4S,Vm.4S ZIP2 Vd2.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd1.4S → result.val[0] Vd2.4S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.4S,Vn.4S,Vm.4S ZIP2 Vd2.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd1.4S → result.val[0] Vd2.4S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.16B,Vn.16B,Vm.16B ZIP2 Vd2.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd1.16B → result.val[0] Vd2.16B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.8H,Vn.8H,Vm.8H ZIP2 Vd2.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd1.8H → result.val[0] Vd2.8H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.4S,Vn.4S,Vm.4S ZIP2 Vd2.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd1.4S → result.val[0] Vd2.4S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.16B,Vn.16B,Vm.16B ZIP2 Vd2.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd1.16B → result.val[0] Vd2.16B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Zip vectors (secondary). This instruction reads adjacent vector elements from the lower half of two source SIMD&FP registers as pairs, interleaves the pairs and places them into a vector, and writes the vector to the destination SIMD&FP register. The first pair from the first source register is placed into the two lowest vector elements, with subsequent pairs taken alternately from each source register.
ZIP1 Vd1.8H,Vn.8H,Vm.8H ZIP2 Vd2.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd1.8H → result.val[0] Vd2.8H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = V[n]; bits(datasize) operand2 = V[m]; bits(datasize) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize] = Elem[operand1, base+p, esize]; Elem[result, 2*p+1, esize] = Elem[operand2, base+p, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.8B,Vn.8B,Vm.8B UZP2 Vd2.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd1.8B → result.val[0] Vd2.8B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.4H,Vn.4H,Vm.4H UZP2 Vd2.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd1.4H → result.val[0] Vd2.4H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.2S,Vn.2S,Vm.2S UZP2 Vd2.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd1.2S → result.val[0] Vd2.2S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.2S,Vn.2S,Vm.2S UZP2 Vd2.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd1.2S → result.val[0] Vd2.2S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.8B,Vn.8B,Vm.8B UZP2 Vd2.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd1.8B → result.val[0] Vd2.8B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.4H,Vn.4H,Vm.4H UZP2 Vd2.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd1.4H → result.val[0] Vd2.4H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.2S,Vn.2S,Vm.2S UZP2 Vd2.2S,Vn.2S,Vm.2S
a → Vn.2S
b → Vm.2S
Vd1.2S → result.val[0] Vd2.2S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.8B,Vn.8B,Vm.8B UZP2 Vd2.8B,Vn.8B,Vm.8B
a → Vn.8B
b → Vm.8B
Vd1.8B → result.val[0] Vd2.8B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.4H,Vn.4H,Vm.4H UZP2 Vd2.4H,Vn.4H,Vm.4H
a → Vn.4H
b → Vm.4H
Vd1.4H → result.val[0] Vd2.4H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.16B,Vn.16B,Vm.16B UZP2 Vd2.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd1.16B → result.val[0] Vd2.16B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.8H,Vn.8H,Vm.8H UZP2 Vd2.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd1.8H → result.val[0] Vd2.8H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.4S,Vn.4S,Vm.4S UZP2 Vd2.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd1.4S → result.val[0] Vd2.4S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.4S,Vn.4S,Vm.4S UZP2 Vd2.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd1.4S → result.val[0] Vd2.4S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.16B,Vn.16B,Vm.16B UZP2 Vd2.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd1.16B → result.val[0] Vd2.16B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.8H,Vn.8H,Vm.8H UZP2 Vd2.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd1.8H → result.val[0] Vd2.8H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.4S,Vn.4S,Vm.4S UZP2 Vd2.4S,Vn.4S,Vm.4S
a → Vn.4S
b → Vm.4S
Vd1.4S → result.val[0] Vd2.4S → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.16B,Vn.16B,Vm.16B UZP2 Vd2.16B,Vn.16B,Vm.16B
a → Vn.16B
b → Vm.16B
Vd1.16B → result.val[0] Vd2.16B → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
Unzip vectors (secondary). This instruction reads corresponding odd-numbered vector elements from the two source SIMD&FP registers, places the result from the first source register into consecutive elements in the lower half of a vector, and the result from the second source register into consecutive elements in the upper half of a vector, and writes the vector to the destination SIMD&FP register.
UZP1 Vd1.8H,Vn.8H,Vm.8H UZP2 Vd2.8H,Vn.8H,Vm.8H
a → Vn.8H
b → Vm.8H
Vd1.8H → result.val[0] Vd2.8H → result.val[1]
CheckFPAdvSIMDEnabled64(); bits(datasize) operandl = V[n]; bits(datasize) operandh = V[m]; bits(datasize) result; bits(datasize*2) zipped = operandh:operandl; for e = 0 to elements-1 Elem[result, e, esize] = Elem[zipped, 2*e+part, esize]; V[d] = result;
v7/A32/A64
NOP
a → Vd.8B
Vd.4H → result
v7/A32/A64
NOP
a → Vd.8B
Vd.2S → result
v7/A32/A64
NOP
a → Vd.8B
Vd.2S → result
v7/A32/A64
NOP
a → Vd.8B
Vd.8B → result
v7/A32/A64
NOP
a → Vd.8B
Vd.4H → result
v7/A32/A64
NOP
a → Vd.8B
Vd.2S → result
v7/A32/A64
NOP
a → Vd.8B
Vd.8B → result
v7/A32/A64
NOP
a → Vd.8B
Vd.4H → result
v7/A32/A64
NOP
a → Vd.8B
Vd.1D → result
v7/A32/A64
NOP
a → Vd.8B
Vd.1D → result
v7/A32/A64
NOP
a → Vd.8B
Vd.1D → result
A64
NOP
a → Vd.8B
Vd.1D → result
A32/A64
NOP
a → Vd.8B
Vd.4H → result
v7/A32/A64
NOP
a → Vd.4H
Vd.8B → result
v7/A32/A64
NOP
a → Vd.4H
Vd.2S → result
v7/A32/A64
NOP
a → Vd.4H
Vd.2S → result
v7/A32/A64
NOP
a → Vd.4H
Vd.8B → result
v7/A32/A64
NOP
a → Vd.4H
Vd.4H → result
v7/A32/A64
NOP
a → Vd.4H
Vd.2S → result
v7/A32/A64
NOP
a → Vd.4H
Vd.8B → result
v7/A32/A64
NOP
a → Vd.4H
Vd.4H → result
v7/A32/A64
NOP
a → Vd.4H
Vd.1D → result
v7/A32/A64
NOP
a → Vd.4H
Vd.1D → result
v7/A32/A64
NOP
a → Vd.4H
Vd.1D → result
A64
NOP
a → Vd.4H
Vd.1D → result
A32/A64
NOP
a → Vd.4H
Vd.4H → result
v7/A32/A64
NOP
a → Vd.2S
Vd.8B → result
v7/A32/A64
NOP
a → Vd.2S
Vd.4H → result
v7/A32/A64
NOP
a → Vd.2S
Vd.2S → result
v7/A32/A64
NOP
a → Vd.2S
Vd.8B → result
v7/A32/A64
NOP
a → Vd.2S
Vd.4H → result
v7/A32/A64
NOP
a → Vd.2S
Vd.2S → result
v7/A32/A64
NOP
a → Vd.2S
Vd.8B → result
v7/A32/A64
NOP
a → Vd.2S
Vd.4H → result
v7/A32/A64
NOP
a → Vd.2S
Vd.1D → result
v7/A32/A64
NOP
a → Vd.2S
Vd.1D → result
v7/A32/A64
NOP
a → Vd.2S
Vd.1D → result
A64
NOP
a → Vd.2S
Vd.1D → result
A32/A64
NOP
a → Vd.2S
Vd.4H → result
v7/A32/A64
NOP
a → Vd.2S
Vd.8B → result
v7/A32/A64
NOP
a → Vd.2S
Vd.4H → result
v7/A32/A64
NOP
a → Vd.2S
Vd.2S → result
v7/A32/A64
NOP
a → Vd.2S
Vd.8B → result
v7/A32/A64
NOP
a → Vd.2S
Vd.4H → result
v7/A32/A64
NOP
a → Vd.2S
Vd.2S → result
v7/A32/A64
NOP
a → Vd.2S
Vd.8B → result
v7/A32/A64
NOP
a → Vd.2S
Vd.4H → result
v7/A32/A64
NOP
a → Vd.2S
Vd.1D → result
v7/A32/A64
NOP
a → Vd.2S
Vd.1D → result
v7/A32/A64
NOP
a → Vd.2S
Vd.1D → result
A64
NOP
a → Vd.2S
Vd.1D → result
A32/A64
NOP
a → Vd.1D
Vd.1D → result
A64
NOP
a → Vd.2S
Vd.4H → result
v7/A32/A64
NOP
a → Vd.8B
Vd.8B → result
v7/A32/A64
NOP
a → Vd.8B
Vd.4H → result
v7/A32/A64
NOP
a → Vd.8B
Vd.2S → result
v7/A32/A64
NOP
a → Vd.8B
Vd.2S → result
v7/A32/A64
NOP
a → Vd.8B
Vd.4H → result
v7/A32/A64
NOP
a → Vd.8B
Vd.2S → result
v7/A32/A64
NOP
a → Vd.8B
Vd.8B → result
v7/A32/A64
NOP
a → Vd.8B
Vd.4H → result
v7/A32/A64
NOP
a → Vd.8B
Vd.1D → result
v7/A32/A64
NOP
a → Vd.8B
Vd.1D → result
v7/A32/A64
NOP
a → Vd.8B
Vd.1D → result
A64
NOP
a → Vd.8B
Vd.1D → result
A32/A64
NOP
a → Vd.8B
Vd.4H → result
v7/A32/A64
NOP
a → Vd.4H
Vd.8B → result
v7/A32/A64
NOP
a → Vd.4H
Vd.4H → result
v7/A32/A64
NOP
a → Vd.4H
Vd.2S → result
v7/A32/A64
NOP
a → Vd.4H
Vd.2S → result
v7/A32/A64
NOP
a → Vd.4H
Vd.8B → result
v7/A32/A64
NOP
a → Vd.4H
Vd.2S → result
v7/A32/A64
NOP
a → Vd.4H
Vd.8B → result
v7/A32/A64
NOP
a → Vd.4H
Vd.4H → result
v7/A32/A64
NOP
a → Vd.4H
Vd.1D → result
v7/A32/A64
NOP
a → Vd.4H
Vd.1D → result
v7/A32/A64
NOP
a → Vd.4H
Vd.1D → result
A64
NOP
a → Vd.4H
Vd.1D → result
A32/A64
NOP
a → Vd.4H
Vd.4H → result
v7/A32/A64
NOP
a → Vd.2S
Vd.8B → result
v7/A32/A64
NOP
a → Vd.2S
Vd.4H → result
v7/A32/A64
NOP
a → Vd.2S
Vd.2S → result
v7/A32/A64
NOP
a → Vd.2S
Vd.2S → result
v7/A32/A64
NOP
a → Vd.2S
Vd.8B → result
v7/A32/A64
NOP
a → Vd.2S
Vd.4H → result
v7/A32/A64
NOP
a → Vd.2S
Vd.8B → result
v7/A32/A64
NOP
a → Vd.2S
Vd.4H → result
v7/A32/A64
NOP
a → Vd.2S
Vd.1D → result
v7/A32/A64
NOP
a → Vd.2S
Vd.1D → result
v7/A32/A64
NOP
a → Vd.2S
Vd.1D → result
A64
NOP
a → Vd.2S
Vd.1D → result
A32/A64
NOP
a → Vd.2S
Vd.4H → result
v7/A32/A64
NOP
a → Vd.8B
Vd.8B → result
v7/A32/A64
NOP
a → Vd.8B
Vd.4H → result
v7/A32/A64
NOP
a → Vd.8B
Vd.2S → result
v7/A32/A64
NOP
a → Vd.8B
Vd.2S → result
v7/A32/A64
NOP
a → Vd.8B
Vd.8B → result
v7/A32/A64
NOP
a → Vd.8B
Vd.4H → result
v7/A32/A64
NOP
a → Vd.8B
Vd.2S → result
v7/A32/A64
NOP
a → Vd.8B
Vd.4H → result
v7/A32/A64
NOP
a → Vd.8B
Vd.1D → result
v7/A32/A64
NOP
a → Vd.8B
Vd.1D → result
v7/A32/A64
NOP
a → Vd.8B
Vd.1D → result
A64
NOP
a → Vd.8B
Vd.1D → result
A32/A64
NOP
a → Vd.8B
Vd.4H → result
v7/A32/A64
NOP
a → Vd.4H
Vd.8B → result
v7/A32/A64
NOP
a → Vd.4H
Vd.4H → result
v7/A32/A64
NOP
a → Vd.4H
Vd.2S → result
v7/A32/A64
NOP
a → Vd.4H
Vd.2S → result
v7/A32/A64
NOP
a → Vd.4H
Vd.8B → result
v7/A32/A64
NOP
a → Vd.4H
Vd.4H → result
v7/A32/A64
NOP
a → Vd.4H
Vd.2S → result
v7/A32/A64
NOP
a → Vd.4H
Vd.8B → result
v7/A32/A64
NOP
a → Vd.4H
Vd.1D → result
v7/A32/A64
NOP
a → Vd.4H
Vd.1D → result
v7/A32/A64
NOP
a → Vd.4H
Vd.1D → result
A64
NOP
a → Vd.4H
Vd.1D → result
A32/A64
NOP
a → Vd.4H
Vd.4H → result
v7/A32/A64
NOP
a → Vd.1D
Vd.8B → result
v7/A32/A64
NOP
a → Vd.1D
Vd.4H → result
v7/A32/A64
NOP
a → Vd.1D
Vd.2S → result
v7/A32/A64
NOP
a → Vd.1D
Vd.2S → result
v7/A32/A64
NOP
a → Vd.1D
Vd.8B → result
v7/A32/A64
NOP
a → Vd.1D
Vd.4H → result
v7/A32/A64
NOP
a → Vd.1D
Vd.2S → result
v7/A32/A64
NOP
a → Vd.1D
Vd.8B → result
v7/A32/A64
NOP
a → Vd.1D
Vd.4H → result
v7/A32/A64
NOP
a → Vd.1D
Vd.1D → result
v7/A32/A64
NOP
a → Vd.1D
Vd.1D → result
A64
NOP
a → Vd.1D
Vd.1D → result
A32/A64
NOP
a → Vd.1D
Vd.4H → result
v7/A32/A64
NOP
a → Vd.1D
Vd.8B → result
v7/A32/A64
NOP
a → Vd.1D
Vd.4H → result
v7/A32/A64
NOP
a → Vd.1D
Vd.2S → result
v7/A32/A64
NOP
a → Vd.1D
Vd.2S → result
v7/A32/A64
NOP
a → Vd.1D
Vd.8B → result
v7/A32/A64
NOP
a → Vd.1D
Vd.4H → result
v7/A32/A64
NOP
a → Vd.1D
Vd.2S → result
v7/A32/A64
NOP
a → Vd.1D
Vd.8B → result
v7/A32/A64
NOP
a → Vd.1D
Vd.4H → result
v7/A32/A64
NOP
a → Vd.1D
Vd.1D → result
v7/A32/A64
NOP
a → Vd.1D
Vd.1D → result
A64
NOP
a → Vd.1D
Vd.1D → result
A32/A64
NOP
a → Vd.1D
Vd.4H → result
v7/A32/A64
NOP
a → Vd.4H
Vd.8B → result
v7/A32/A64
NOP
a → Vd.4H
Vd.4H → result
v7/A32/A64
NOP
a → Vd.4H
Vd.2S → result
v7/A32/A64
NOP
a → Vd.4H
Vd.2S → result
v7/A32/A64
NOP
a → Vd.4H
Vd.8B → result
v7/A32/A64
NOP
a → Vd.4H
Vd.4H → result
v7/A32/A64
NOP
a → Vd.4H
Vd.2S → result
v7/A32/A64
NOP
a → Vd.4H
Vd.8B → result
v7/A32/A64
NOP
a → Vd.4H
Vd.4H → result
v7/A32/A64
NOP
a → Vd.4H
Vd.1D → result
v7/A32/A64
NOP
a → Vd.4H
Vd.1D → result
v7/A32/A64
NOP
a → Vd.4H
Vd.1D → result
A64
NOP
a → Vd.4H
Vd.1D → result
A32/A64
NOP
a → Vd.16B
Vd.8H → result
v7/A32/A64
NOP
a → Vd.16B
Vd.4S → result
v7/A32/A64
NOP
a → Vd.16B
Vd.4S → result
v7/A32/A64
NOP
a → Vd.16B
Vd.16B → result
v7/A32/A64
NOP
a → Vd.16B
Vd.8H → result
v7/A32/A64
NOP
a → Vd.16B
Vd.4S → result
v7/A32/A64
NOP
a → Vd.16B
Vd.16B → result
v7/A32/A64
NOP
a → Vd.16B
Vd.8H → result
v7/A32/A64
NOP
a → Vd.16B
Vd.2D → result
v7/A32/A64
NOP
a → Vd.16B
Vd.2D → result
v7/A32/A64
NOP
a → Vd.16B
Vd.2D → result
A64
NOP
a → Vd.16B
Vd.2D → result
A32/A64
NOP
a → Vd.16B
Vd.1Q → result
A32/A64
NOP
a → Vd.16B
Vd.8H → result
v7/A32/A64
NOP
a → Vd.8H
Vd.16B → result
v7/A32/A64
NOP
a → Vd.8H
Vd.4S → result
v7/A32/A64
NOP
a → Vd.8H
Vd.4S → result
v7/A32/A64
NOP
a → Vd.8H
Vd.16B → result
v7/A32/A64
NOP
a → Vd.8H
Vd.8H → result
v7/A32/A64
NOP
a → Vd.8H
Vd.4S → result
v7/A32/A64
NOP
a → Vd.8H
Vd.16B → result
v7/A32/A64
NOP
a → Vd.8H
Vd.8H → result
v7/A32/A64
NOP
a → Vd.8H
Vd.2D → result
v7/A32/A64
NOP
a → Vd.8H
Vd.2D → result
v7/A32/A64
NOP
a → Vd.8H
Vd.2D → result
A64
NOP
a → Vd.8H
Vd.2D → result
A32/A64
NOP
a → Vd.8H
Vd.1Q → result
A32/A64
NOP
a → Vd.8H
Vd.8H → result
v7/A32/A64
NOP
a → Vd.4S
Vd.16B → result
v7/A32/A64
NOP
a → Vd.4S
Vd.8H → result
v7/A32/A64
NOP
a → Vd.4S
Vd.4S → result
v7/A32/A64
NOP
a → Vd.4S
Vd.16B → result
v7/A32/A64
NOP
a → Vd.4S
Vd.8H → result
v7/A32/A64
NOP
a → Vd.4S
Vd.4S → result
v7/A32/A64
NOP
a → Vd.4S
Vd.16B → result
v7/A32/A64
NOP
a → Vd.4S
Vd.8H → result
v7/A32/A64
NOP
a → Vd.4S
Vd.2D → result
v7/A32/A64
NOP
a → Vd.4S
Vd.2D → result
v7/A32/A64
NOP
a → Vd.4S
Vd.2D → result
A64
NOP
a → Vd.4S
Vd.2D → result
A32/A64
NOP
a → Vd.4S
Vd.1Q → result
A32/A64
NOP
a → Vd.4S
Vd.8H → result
v7/A32/A64
NOP
a → Vd.4S
Vd.16B → result
v7/A32/A64
NOP
a → Vd.4S
Vd.8H → result
v7/A32/A64
NOP
a → Vd.4S
Vd.4S → result
v7/A32/A64
NOP
a → Vd.4S
Vd.16B → result
v7/A32/A64
NOP
a → Vd.4S
Vd.8H → result
v7/A32/A64
NOP
a → Vd.4S
Vd.4S → result
v7/A32/A64
NOP
a → Vd.4S
Vd.16B → result
v7/A32/A64
NOP
a → Vd.4S
Vd.8H → result
v7/A32/A64
NOP
a → Vd.4S
Vd.2D → result
v7/A32/A64
NOP
a → Vd.4S
Vd.2D → result
v7/A32/A64
NOP
a → Vd.4S
Vd.2D → result
A64
NOP
a → Vd.4S
Vd.2D → result
A32/A64
NOP
a → Vd.4S
Vd.1Q → result
A32/A64
NOP
a → Vd.2D
Vd.2D → result
A64
NOP
a → Vd.1Q
Vd.2D → result
A64
NOP
a → Vd.4S
Vd.8H → result
v7/A32/A64
NOP
a → Vd.16B
Vd.16B → result
v7/A32/A64
NOP
a → Vd.16B
Vd.8H → result
v7/A32/A64
NOP
a → Vd.16B
Vd.4S → result
v7/A32/A64
NOP
a → Vd.16B
Vd.4S → result
v7/A32/A64
NOP
a → Vd.16B
Vd.8H → result
v7/A32/A64
NOP
a → Vd.16B
Vd.4S → result
v7/A32/A64
NOP
a → Vd.16B
Vd.16B → result
v7/A32/A64
NOP
a → Vd.16B
Vd.8H → result
v7/A32/A64
NOP
a → Vd.16B
Vd.2D → result
v7/A32/A64
NOP
a → Vd.16B
Vd.2D → result
v7/A32/A64
NOP
a → Vd.16B
Vd.2D → result
A64
NOP
a → Vd.16B
Vd.2D → result
A32/A64
NOP
a → Vd.16B
Vd.1Q → result
A32/A64
NOP
a → Vd.16B
Vd.8H → result
v7/A32/A64
NOP
a → Vd.8H
Vd.16B → result
v7/A32/A64
NOP
a → Vd.8H
Vd.8H → result
v7/A32/A64
NOP
a → Vd.8H
Vd.4S → result
v7/A32/A64
NOP
a → Vd.8H
Vd.4S → result
v7/A32/A64
NOP
a → Vd.8H
Vd.16B → result
v7/A32/A64
NOP
a → Vd.8H
Vd.4S → result
v7/A32/A64
NOP
a → Vd.8H
Vd.16B → result
v7/A32/A64
NOP
a → Vd.8H
Vd.8H → result
v7/A32/A64
NOP
a → Vd.8H
Vd.2D → result
v7/A32/A64
NOP
a → Vd.8H
Vd.2D → result
v7/A32/A64
NOP
a → Vd.8H
Vd.2D → result
A64
NOP
a → Vd.8H
Vd.2D → result
A32/A64
NOP
a → Vd.8H
Vd.1Q → result
A32/A64
NOP
a → Vd.8H
Vd.8H → result
v7/A32/A64
NOP
a → Vd.4S
Vd.16B → result
v7/A32/A64
NOP
a → Vd.4S
Vd.8H → result
v7/A32/A64
NOP
a → Vd.4S
Vd.4S → result
v7/A32/A64
NOP
a → Vd.4S
Vd.4S → result
v7/A32/A64
NOP
a → Vd.4S
Vd.16B → result
v7/A32/A64
NOP
a → Vd.4S
Vd.8H → result
v7/A32/A64
NOP
a → Vd.4S
Vd.16B → result
v7/A32/A64
NOP
a → Vd.4S
Vd.8H → result
v7/A32/A64
NOP
a → Vd.4S
Vd.2D → result
v7/A32/A64
NOP
a → Vd.4S
Vd.2D → result
v7/A32/A64
NOP
a → Vd.4S
Vd.2D → result
A64
NOP
a → Vd.4S
Vd.2D → result
A32/A64
NOP
a → Vd.4S
Vd.1Q → result
A32/A64
NOP
a → Vd.4S
Vd.8H → result
v7/A32/A64
NOP
a → Vd.16B
Vd.16B → result
v7/A32/A64
NOP
a → Vd.16B
Vd.8H → result
v7/A32/A64
NOP
a → Vd.16B
Vd.4S → result
v7/A32/A64
NOP
a → Vd.16B
Vd.4S → result
v7/A32/A64
NOP
a → Vd.16B
Vd.16B → result
v7/A32/A64
NOP
a → Vd.16B
Vd.8H → result
v7/A32/A64
NOP
a → Vd.16B
Vd.4S → result
v7/A32/A64
NOP
a → Vd.16B
Vd.8H → result
v7/A32/A64
NOP
a → Vd.16B
Vd.2D → result
v7/A32/A64
NOP
a → Vd.16B
Vd.2D → result
v7/A32/A64
NOP
a → Vd.16B
Vd.2D → result
A64
NOP
a → Vd.16B
Vd.2D → result
A32/A64
NOP
a → Vd.16B
Vd.1Q → result
A32/A64
NOP
a → Vd.16B
Vd.8H → result
v7/A32/A64
NOP
a → Vd.8H
Vd.16B → result
v7/A32/A64
NOP
a → Vd.8H
Vd.8H → result
v7/A32/A64
NOP
a → Vd.8H
Vd.4S → result
v7/A32/A64
NOP
a → Vd.8H
Vd.4S → result
v7/A32/A64
NOP
a → Vd.8H
Vd.16B → result
v7/A32/A64
NOP
a → Vd.8H
Vd.8H → result
v7/A32/A64
NOP
a → Vd.8H
Vd.4S → result
v7/A32/A64
NOP
a → Vd.8H
Vd.16B → result
v7/A32/A64
NOP
a → Vd.8H
Vd.2D → result
v7/A32/A64
NOP
a → Vd.8H
Vd.2D → result
v7/A32/A64
NOP
a → Vd.8H
Vd.2D → result
A64
NOP
a → Vd.8H
Vd.2D → result
A32/A64
NOP
a → Vd.8H
Vd.1Q → result
A32/A64
NOP
a → Vd.8H
Vd.8H → result
v7/A32/A64
NOP
a → Vd.2D
Vd.16B → result
v7/A32/A64
NOP
a → Vd.2D
Vd.8H → result
v7/A32/A64
NOP
a → Vd.2D
Vd.4S → result
v7/A32/A64
NOP
a → Vd.2D
Vd.4S → result
v7/A32/A64
NOP
a → Vd.2D
Vd.16B → result
v7/A32/A64
NOP
a → Vd.2D
Vd.8H → result
v7/A32/A64
NOP
a → Vd.2D
Vd.4S → result
v7/A32/A64
NOP
a → Vd.2D
Vd.16B → result
v7/A32/A64
NOP
a → Vd.2D
Vd.8H → result
v7/A32/A64
NOP
a → Vd.2D
Vd.2D → result
v7/A32/A64
NOP
a → Vd.2D
Vd.2D → result
v7/A32/A64
NOP
a → Vd.2D
Vd.2D → result
A64
NOP
a → Vd.2D
Vd.2D → result
A32/A64
NOP
a → Vd.1Q
Vd.2D → result
A32/A64
NOP
a → Vd.2D
Vd.2D → result
A32/A64
NOP
a → Vd.1Q
Vd.2D → result
A32/A64
NOP
a → Vd.2D
Vd.8H → result
v7/A32/A64
NOP
a → Vd.2D
Vd.16B → result
v7/A32/A64
NOP
a → Vd.2D
Vd.8H → result
v7/A32/A64
NOP
a → Vd.2D
Vd.4S → result
v7/A32/A64
NOP
a → Vd.2D
Vd.4S → result
v7/A32/A64
NOP
a → Vd.2D
Vd.16B → result
v7/A32/A64
NOP
a → Vd.2D
Vd.8H → result
v7/A32/A64
NOP
a → Vd.2D
Vd.4S → result
v7/A32/A64
NOP
a → Vd.2D
Vd.16B → result
v7/A32/A64
NOP
a → Vd.2D
Vd.8H → result
v7/A32/A64
NOP
a → Vd.2D
Vd.2D → result
v7/A32/A64
NOP
a → Vd.2D
Vd.2D → result
A32/A64
NOP
a → Vd.2D
Vd.8H → result
v7/A32/A64
NOP
a → Vd.8H
Vd.16B → result
v7/A32/A64
NOP
a → Vd.8H
Vd.8H → result
v7/A32/A64
NOP
a → Vd.8H
Vd.4S → result
v7/A32/A64
NOP
a → Vd.8H
Vd.4S → result
v7/A32/A64
NOP
a → Vd.8H
Vd.16B → result
v7/A32/A64
NOP
a → Vd.8H
Vd.8H → result
v7/A32/A64
NOP
a → Vd.8H
Vd.4S → result
v7/A32/A64
NOP
a → Vd.8H
Vd.16B → result
v7/A32/A64
NOP
a → Vd.8H
Vd.8H → result
v7/A32/A64
NOP
a → Vd.8H
Vd.2D → result
v7/A32/A64
NOP
a → Vd.8H
Vd.2D → result
v7/A32/A64
NOP
a → Vd.8H
Vd.2D → result
A64
NOP
a → Vd.8H
Vd.2D → result
A32/A64
NOP
a → Vd.8H
Vd.1Q → result
A32/A64
NOP
a → Vd.1D
Vd.8B → result
A64
NOP
a → Vd.1D
Vd.4H → result
A64
NOP
a → Vd.1D
Vd.2S → result
A64
NOP
a → Vd.1D
Vd.8B → result
A64
NOP
a → Vd.1D
Vd.4H → result
A64
NOP
a → Vd.1D
Vd.2S → result
A64
NOP
a → Vd.1D
Vd.8B → result
A64
NOP
a → Vd.1D
Vd.4H → result
A64
NOP
a → Vd.1D
Vd.1D → result
A64
NOP
a → Vd.1D
Vd.1D → result
A64
NOP
a → Vd.1D
Vd.4H → result
A64
NOP
a → Vd.1D
Vd.2S → result
A64
NOP
a → Vd.2D
Vd.16B → result
A64
NOP
a → Vd.2D
Vd.8H → result
A64
NOP
a → Vd.2D
Vd.4S → result
A64
NOP
a → Vd.2D
Vd.16B → result
A64
NOP
a → Vd.2D
Vd.8H → result
A64
NOP
a → Vd.2D
Vd.4S → result
A64
NOP
a → Vd.2D
Vd.16B → result
A64
NOP
a → Vd.2D
Vd.8H → result
A64
NOP
a → Vd.2D
Vd.2D → result
A64
NOP
a → Vd.2D
Vd.2D → result
A64
NOP
a → Vd.2D
Vd.8H → result
A64
NOP
a → Vd.2D
Vd.4S → result
A64
NOP
a → Vd.1D
Vd.8B → result
A32/A64
NOP
a → Vd.1D
Vd.4H → result
A32/A64
NOP
a → Vd.1D
Vd.2S → result
A32/A64
NOP
a → Vd.1D
Vd.8B → result
A32/A64
NOP
a → Vd.1D
Vd.4H → result
A32/A64
NOP
a → Vd.1D
Vd.2S → result
A32/A64
NOP
a → Vd.1D
Vd.8B → result
A32/A64
NOP
a → Vd.1D
Vd.4H → result
A32/A64
NOP
a → Vd.1D
Vd.1D → result
A32/A64
NOP
a → Vd.1D
Vd.1D → result
A32/A64
NOP
a → Vd.1D
Vd.1D → result
A64
NOP
a → Vd.1D
Vd.4H → result
A32/A64
NOP
a → Vd.2D
Vd.16B → result
A32/A64
NOP
a → Vd.2D
Vd.8H → result
A32/A64
NOP
a → Vd.2D
Vd.4S → result
A32/A64
NOP
a → Vd.2D
Vd.16B → result
A32/A64
NOP
a → Vd.2D
Vd.8H → result
A32/A64
NOP
a → Vd.2D
Vd.4S → result
A32/A64
NOP
a → Vd.2D
Vd.16B → result
A32/A64
NOP
a → Vd.2D
Vd.8H → result
A32/A64
NOP
a → Vd.2D
Vd.2D → result
A32/A64
NOP
a → Vd.2D
Vd.2D → result
A32/A64
NOP
a → Vd.2D
Vd.2D → result
A64
NOP
a → Vd.2D
Vd.8H → result
A32/A64
NOP
a → Vd.1Q
Vd.16B → result
A32/A64
NOP
a → Vd.1Q
Vd.8H → result
A32/A64
NOP
a → Vd.1Q
Vd.4S → result
A32/A64
NOP
a → Vd.1Q
Vd.16B → result
A32/A64
NOP
a → Vd.1Q
Vd.8H → result
A32/A64
NOP
a → Vd.1Q
Vd.4S → result
A32/A64
NOP
a → Vd.1Q
Vd.16B → result
A32/A64
NOP
a → Vd.1Q
Vd.8H → result
A32/A64
NOP
a → Vd.1Q
Vd.2D → result
A32/A64
NOP
a → Vd.1Q
Vd.2D → result
A32/A64
NOP
a → Vd.1Q
Vd.2D → result
A64
NOP
a → Vd.1Q
Vd.8H → result
A32/A64
Load SIMD&FP Register (register offset). This instruction loads a SIMD&FP register from memory. The address that is used for the load is calculated from a base register value and an offset register value. The offset can be optionally shifted and extended.
LDR Qd,[Xn]
ptr → Xn
Qd → result
bits(64) offset = ExtendReg(m, extend_type, shift); if HaveMTEExt() then boolean is_load_store = memop IN {MemOp_STORE, MemOp_LOAD}; SetNotTagCheckedInstruction(is_load_store && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(datasize) data; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; address = address + offset; case memop of when MemOp_STORE data = V[t]; Mem[address, datasize DIV 8, AccType_VEC] = data; when MemOp_LOAD data = Mem[address, datasize DIV 8, AccType_VEC]; V[t] = data;
A32/A64
Store SIMD&FP register (register offset). This instruction stores a single SIMD&FP register to memory. The address that is used for the store is calculated from a base register value and an offset register value. The offset can be optionally shifted and extended.
STR Qt,[Xn]
ptr → Xn
val → Qt
void → result
bits(64) offset = ExtendReg(m, extend_type, shift); if HaveMTEExt() then boolean is_load_store = memop IN {MemOp_STORE, MemOp_LOAD}; SetNotTagCheckedInstruction(is_load_store && n == 31); CheckFPAdvSIMDEnabled64(); bits(64) address; bits(datasize) data; if n == 31 then CheckSPAlignment(); address = SP[]; else address = X[n]; address = address + offset; case memop of when MemOp_STORE data = V[t]; Mem[address, datasize DIV 8, AccType_VEC] = data; when MemOp_LOAD data = Mem[address, datasize DIV 8, AccType_VEC]; V[t] = data;
A32/A64
AES single round encryption.
AESE Vd.16B,Vn.16B
data → Vd.16B
key → Vn.16B
Vd.16B → result
AArch64.CheckFPAdvSIMDEnabled(); bits(128) operand1 = V[d]; bits(128) operand2 = V[n]; bits(128) result; result = operand1 EOR operand2; result = AESSubBytes(AESShiftRows(result)); V[d] = result;
A32/A64
AES single round decryption.
AESD Vd.16B,Vn.16B
data → Vd.16B
key → Vn.16B
Vd.16B → result
AArch64.CheckFPAdvSIMDEnabled(); bits(128) operand1 = V[d]; bits(128) operand2 = V[n]; bits(128) result; result = operand1 EOR operand2; result = AESInvSubBytes(AESInvShiftRows(result)); V[d] = result;
A32/A64
AES mix columns.
AESMC Vd.16B,Vn.16B
data → Vn.16B
Vd.16B → result
AArch64.CheckFPAdvSIMDEnabled(); bits(128) operand = V[n]; bits(128) result; result = AESMixColumns(operand); V[d] = result;
A32/A64
AES inverse mix columns.
AESIMC Vd.16B,Vn.16B
data → Vn.16B
Vd.16B → result
AArch64.CheckFPAdvSIMDEnabled(); bits(128) operand = V[n]; bits(128) result; result = AESInvMixColumns(operand); V[d] = result;
A32/A64
SHA1 hash update (choose).
SHA1C Qd,Sn,Vm.4S
hash_abcd → Qd
hash_e → Sn
wk → Vm.4S
Qd → result
AArch64.CheckFPAdvSIMDEnabled(); bits(128) X = V[d]; bits(32) Y = V[n]; // Note: 32 not 128 bits wide bits(128) W = V[m]; bits(32) t; for e = 0 to 3 t = SHAchoose(X<63:32>, X<95:64>, X<127:96>); Y = Y + ROL(X<31:0>, 5) + t + Elem[W, e, 32]; X<63:32> = ROL(X<63:32>, 30); <Y, X> = ROL(Y:X, 32); V[d] = X;
A32/A64
SHA1 hash update (parity).
SHA1P Qd,Sn,Vm.4S
hash_abcd → Qd
hash_e → Sn
wk → Vm.4S
Qd → result
AArch64.CheckFPAdvSIMDEnabled(); bits(128) X = V[d]; bits(32) Y = V[n]; // Note: 32 not 128 bits wide bits(128) W = V[m]; bits(32) t; for e = 0 to 3 t = SHAparity(X<63:32>, X<95:64>, X<127:96>); Y = Y + ROL(X<31:0>, 5) + t + Elem[W, e, 32]; X<63:32> = ROL(X<63:32>, 30); <Y, X> = ROL(Y:X, 32); V[d] = X;
A32/A64
SHA1 hash update (majority).
SHA1M Qd,Sn,Vm.4S
hash_abcd → Qd
hash_e → Sn
wk → Vm.4S
Qd → result
AArch64.CheckFPAdvSIMDEnabled(); bits(128) X = V[d]; bits(32) Y = V[n]; // Note: 32 not 128 bits wide bits(128) W = V[m]; bits(32) t; for e = 0 to 3 t = SHAmajority(X<63:32>, X<95:64>, X<127:96>); Y = Y + ROL(X<31:0>, 5) + t + Elem[W, e, 32]; X<63:32> = ROL(X<63:32>, 30); <Y, X> = ROL(Y:X, 32); V[d] = X;
A32/A64
SHA1 fixed rotate.
SHA1H Sd,Sn
hash_e → Sn
Sd → result
AArch64.CheckFPAdvSIMDEnabled(); bits(32) operand = V[n]; // read element [0] only, [1-3] zeroed V[d] = ROL(operand, 30);
A32/A64
SHA1 schedule update 0.
SHA1SU0 Vd.4S,Vn.4S,Vm.4S
w0_3 → Vd.4S
w4_7 → Vn.4S
w8_11 → Vm.4S
Vd.4S → result
AArch64.CheckFPAdvSIMDEnabled(); bits(128) operand1 = V[d]; bits(128) operand2 = V[n]; bits(128) operand3 = V[m]; bits(128) result; result = operand2<63:0>:operand1<127:64>; result = result EOR operand1 EOR operand3; V[d] = result;
A32/A64
SHA1 schedule update 1.
SHA1SU1 Vd.4S,Vn.4S
tw0_3 → Vd.4S
w12_15 → Vn.4S
Vd.4S → result
AArch64.CheckFPAdvSIMDEnabled(); bits(128) operand1 = V[d]; bits(128) operand2 = V[n]; bits(128) result; bits(128) T = operand1 EOR LSR(operand2, 32); result<31:0> = ROL(T<31:0>, 1); result<63:32> = ROL(T<63:32>, 1); result<95:64> = ROL(T<95:64>, 1); result<127:96> = ROL(T<127:96>, 1) EOR ROL(T<31:0>, 2); V[d] = result;
A32/A64
SHA256 hash update (part 1).
SHA256H Qd,Qn,Vm.4S
hash_abcd → Qd
hash_efgh → Qn
wk → Vm.4S
Qd → result
AArch64.CheckFPAdvSIMDEnabled(); bits(128) result; result = SHA256hash(V[d], V[n], V[m], TRUE); V[d] = result;
A32/A64
SHA256 hash update (part 2).
SHA256H2 Qd,Qn,Vm.4S
hash_efgh → Qd
hash_abcd → Qn
wk → Vm.4S
Qd → result
AArch64.CheckFPAdvSIMDEnabled(); bits(128) result; result = SHA256hash(V[n], V[d], V[m], FALSE); V[d] = result;
A32/A64
SHA256 schedule update 0.
SHA256SU0 Vd.4S,Vn.4S
w0_3 → Vd.4S
w4_7 → Vn.4S
Vd.4S → result
AArch64.CheckFPAdvSIMDEnabled(); bits(128) operand1 = V[d]; bits(128) operand2 = V[n]; bits(128) result; bits(128) T = operand2<31:0>:operand1<127:32>; bits(32) elt; for e = 0 to 3 elt = Elem[T, e, 32]; elt = ROR(elt, 7) EOR ROR(elt, 18) EOR LSR(elt, 3); Elem[result, e, 32] = elt + Elem[operand1, e, 32]; V[d] = result;
A32/A64
SHA256 schedule update 1.
SHA256SU1 Vd.4S,Vn.4S,Vm.4S
tw0_3 → Vd.4S
w8_11 → Vn.4S
w12_15 → Vm.4S
Vd.4S → result
AArch64.CheckFPAdvSIMDEnabled(); bits(128) operand1 = V[d]; bits(128) operand2 = V[n]; bits(128) operand3 = V[m]; bits(128) result; bits(128) T0 = operand3<31:0>:operand2<127:32>; bits(64) T1; bits(32) elt; T1 = operand3<127:64>; for e = 0 to 1 elt = Elem[T1, e, 32]; elt = ROR(elt, 17) EOR ROR(elt, 19) EOR LSR(elt, 10); elt = elt + Elem[operand1, e, 32] + Elem[T0, e, 32]; Elem[result, e, 32] = elt; T1 = result<63:0>; for e = 2 to 3 elt = Elem[T1, e-2, 32]; elt = ROR(elt, 17) EOR ROR(elt, 19) EOR LSR(elt, 10); elt = elt + Elem[operand1, e, 32] + Elem[T0, e, 32]; Elem[result, e, 32] = elt; V[d] = result;
A32/A64
Polynomial Multiply Long. This instruction multiplies corresponding elements in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
PMULL Vd.1Q,Vn.1D,Vm.1D
a → Vn.1D
b → Vm.1D
Vd.1Q → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, 2*esize] = PolynomialMult(element1, element2); V[d] = result;
A32/A64
Polynomial Multiply Long. This instruction multiplies corresponding elements in the lower or upper half of the vectors of the two source SIMD&FP registers, places the results in a vector, and writes the vector to the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied.
PMULL2 Vd.1Q,Vn.2D,Vm.2D
a → Vn.2D
b → Vm.2D
Vd.1Q → result
CheckFPAdvSIMDEnabled64(); bits(datasize) operand1 = Vpart[n, part]; bits(datasize) operand2 = Vpart[m, part]; bits(2*datasize) result; bits(esize) element1; bits(esize) element2; for e = 0 to elements-1 element1 = Elem[operand1, e, esize]; element2 = Elem[operand2, e, esize]; Elem[result, e, 2*esize] = PolynomialMult(element1, element2); V[d] = result;
A32/A64
CRC32 checksum performs a cyclic redundancy check (CRC) calculation on a value held in a general-purpose register. It takes an input CRC value in the first source operand, performs a CRC on the input value in the second source operand, and returns the output CRC value. The second source operand can be 8, 16, 32, or 64 bits. To align with common usage, the bit order of the values is reversed as part of the operation, and the polynomial 0x04C11DB7 is used for the CRC calculation.
CRC32B Wd,Wn,Wm
a → Wn
b → Wm
Wd → result
bits(32) acc = X[n]; // accumulator bits(size) val = X[m]; // input value bits(32) poly = 0x04C11DB7<31:0>; bits(32+size) tempacc = BitReverse(acc):Zeros(size); bits(size+32) tempval = BitReverse(val):Zeros(32); // Poly32Mod2 on a bitstring does a polynomial Modulus over {0,1} operation X[d] = BitReverse(Poly32Mod2(tempacc EOR tempval, poly));
A32/A64
CRC32 checksum performs a cyclic redundancy check (CRC) calculation on a value held in a general-purpose register. It takes an input CRC value in the first source operand, performs a CRC on the input value in the second source operand, and returns the output CRC value. The second source operand can be 8, 16, 32, or 64 bits. To align with common usage, the bit order of the values is reversed as part of the operation, and the polynomial 0x04C11DB7 is used for the CRC calculation.
CRC32H Wd,Wn,Wm
a → Wn
b → Wm
Wd → result
bits(32) acc = X[n]; // accumulator bits(size) val = X[m]; // input value bits(32) poly = 0x04C11DB7<31:0>; bits(32+size) tempacc = BitReverse(acc):Zeros(size); bits(size+32) tempval = BitReverse(val):Zeros(32); // Poly32Mod2 on a bitstring does a polynomial Modulus over {0,1} operation X[d] = BitReverse(Poly32Mod2(tempacc EOR tempval, poly));
A32/A64
CRC32 checksum performs a cyclic redundancy check (CRC) calculation on a value held in a general-purpose register. It takes an input CRC value in the first source operand, performs a CRC on the input value in the second source operand, and returns the output CRC value. The second source operand can be 8, 16, 32, or 64 bits. To align with common usage, the bit order of the values is reversed as part of the operation, and the polynomial 0x04C11DB7 is used for the CRC calculation.
CRC32W Wd,Wn,Wm
a → Wn
b → Wm
Wd → result
bits(32) acc = X[n]; // accumulator bits(size) val = X[m]; // input value bits(32) poly = 0x04C11DB7<31:0>; bits(32+size) tempacc = BitReverse(acc):Zeros(size); bits(size+32) tempval = BitReverse(val):Zeros(32); // Poly32Mod2 on a bitstring does a polynomial Modulus over {0,1} operation X[d] = BitReverse(Poly32Mod2(tempacc EOR tempval, poly));
A32/A64
CRC32 checksum performs a cyclic redundancy check (CRC) calculation on a value held in a general-purpose register. It takes an input CRC value in the first source operand, performs a CRC on the input value in the second source operand, and returns the output CRC value. The second source operand can be 8, 16, 32, or 64 bits. To align with common usage, the bit order of the values is reversed as part of the operation, and the polynomial 0x04C11DB7 is used for the CRC calculation.
CRC32X Wd,Wn,Xm
a → Wn
b → Xm
Wd → result
bits(32) acc = X[n]; // accumulator bits(size) val = X[m]; // input value bits(32) poly = 0x04C11DB7<31:0>; bits(32+size) tempacc = BitReverse(acc):Zeros(size); bits(size+32) tempval = BitReverse(val):Zeros(32); // Poly32Mod2 on a bitstring does a polynomial Modulus over {0,1} operation X[d] = BitReverse(Poly32Mod2(tempacc EOR tempval, poly));
A32/A64
CRC32 checksum performs a cyclic redundancy check (CRC) calculation on a value held in a general-purpose register. It takes an input CRC value in the first source operand, performs a CRC on the input value in the second source operand, and returns the output CRC value. The second source operand can be 8, 16, 32, or 64 bits. To align with common usage, the bit order of the values is reversed as part of the operation, and the polynomial 0x1EDC6F41 is used for the CRC calculation.
CRC32CB Wd,Wn,Wm
a → Wn
b → Wm
Wd → result
bits(32) acc = X[n]; // accumulator bits(size) val = X[m]; // input value bits(32) poly = 0x1EDC6F41<31:0>; bits(32+size) tempacc = BitReverse(acc):Zeros(size); bits(size+32) tempval = BitReverse(val):Zeros(32); // Poly32Mod2 on a bitstring does a polynomial Modulus over {0,1} operation X[d] = BitReverse(Poly32Mod2(tempacc EOR tempval, poly));
A32/A64
CRC32 checksum performs a cyclic redundancy check (CRC) calculation on a value held in a general-purpose register. It takes an input CRC value in the first source operand, performs a CRC on the input value in the second source operand, and returns the output CRC value. The second source operand can be 8, 16, 32, or 64 bits. To align with common usage, the bit order of the values is reversed as part of the operation, and the polynomial 0x1EDC6F41 is used for the CRC calculation.
CRC32CH Wd,Wn,Wm
a → Wn
b → Wm
Wd → result
bits(32) acc = X[n]; // accumulator bits(size) val = X[m]; // input value bits(32) poly = 0x1EDC6F41<31:0>; bits(32+size) tempacc = BitReverse(acc):Zeros(size); bits(size+32) tempval = BitReverse(val):Zeros(32); // Poly32Mod2 on a bitstring does a polynomial Modulus over {0,1} operation X[d] = BitReverse(Poly32Mod2(tempacc EOR tempval, poly));
A32/A64
CRC32 checksum performs a cyclic redundancy check (CRC) calculation on a value held in a general-purpose register. It takes an input CRC value in the first source operand, performs a CRC on the input value in the second source operand, and returns the output CRC value. The second source operand can be 8, 16, 32, or 64 bits. To align with common usage, the bit order of the values is reversed as part of the operation, and the polynomial 0x1EDC6F41 is used for the CRC calculation.
CRC32CW Wd,Wn,Wm
a → Wn
b → Wm
Wd → result
bits(32) acc = X[n]; // accumulator bits(size) val = X[m]; // input value bits(32) poly = 0x1EDC6F41<31:0>; bits(32+size) tempacc = BitReverse(acc):Zeros(size); bits(size+32) tempval = BitReverse(val):Zeros(32); // Poly32Mod2 on a bitstring does a polynomial Modulus over {0,1} operation X[d] = BitReverse(Poly32Mod2(tempacc EOR tempval, poly));
A32/A64
CRC32 checksum performs a cyclic redundancy check (CRC) calculation on a value held in a general-purpose register. It takes an input CRC value in the first source operand, performs a CRC on the input value in the second source operand, and returns the output CRC value. The second source operand can be 8, 16, 32, or 64 bits. To align with common usage, the bit order of the values is reversed as part of the operation, and the polynomial 0x1EDC6F41 is used for the CRC calculation.
CRC32CX Wd,Wn,Xm
a → Wn
b → Xm
Wd → result
bits(32) acc = X[n]; // accumulator bits(size) val = X[m]; // input value bits(32) poly = 0x1EDC6F41<31:0>; bits(32+size) tempacc = BitReverse(acc):Zeros(size); bits(size+32) tempval = BitReverse(val):Zeros(32); // Poly32Mod2 on a bitstring does a polynomial Modulus over {0,1} operation X[d] = BitReverse(Poly32Mod2(tempacc EOR tempval, poly));
A32/A64
Important Information for the Arm website. This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.