VCVTT (BFloat16)
Converts from a single-precision value to a BFloat16 value in the top half of a single-precision register.
Converts the single-precision value in a single-precision register to BFloat16 format and writes the result in the top half of a single-precision register, preserving the bottom 16 bits of the register.
Unlike the BFloat16 multiplication instructions, this instruction honors all the control bits in the FPSCR that apply to single-precision arithmetic, including the rounding mode. This instruction can generate a floating-point exception which causes a cumulative exception bit in the FPSCR to be set, or a synchronous exception to be taken, depending on the enable bits in the FPSCR.
It has encodings from the following instruction sets:
A32 (
A1
)
and
T32 (
T1
)
.
!= 1111
1
1
1
0
1
1
1
0
0
1
1
1
0
0
1
1
1
0
VCVTT{<c>}{<q>}.BF16.F32 <Sd>, <Sm>
if !HaveAArch32BF16Ext() then UNDEFINED;
integer d = UInt(Vd:D);
integer m = UInt(Vm:M);
1
1
1
0
1
1
1
0
1
1
1
0
0
1
1
1
0
0
1
1
1
0
VCVTT{<c>}{<q>}.BF16.F32 <Sd>, <Sm>
if !HaveAArch32BF16Ext() then UNDEFINED;
integer d = UInt(Vd:D);
integer m = UInt(Vm:M);
<c>
See Standard assembler syntax fields.
<q>
See Standard assembler syntax fields.
<Sd>
Is the 32-bit name of the SIMD&FP destination register, encoded in the "Vd:D" field.
<Sm>
Is the 32-bit name of the SIMD&FP source register, encoded in the "Vm:M" field.
if ConditionPassed() then
EncodingSpecificOperations();
CheckVFPEnabled(TRUE);
S[d]<31:16> = FPConvertBF(S[m], FPSCR[]);