| |||
| Home > ARMv6 SIMD Instruction Intrinsics > __sel intrinsic | |||
This intrinsic inserts a SEL instruction
into the instruction stream generated by the compiler. It enables
you to select bytes from the input parameters, whereby the bytes
that are selected depend upon the results of previous SIMD instruction
intrinsics. The results of previous SIMD instruction intrinsics
are represented by the Greater than or Equal flags
in the Application Program Status Register (APSR).
The __sel intrinsic works equally well
on both halfword and byte operand intrinsic results. This is because
halfword operand operations set two (duplicate) GE bits per value.
For example, the __sasx intrinsic.
unsigned int __sel(unsigned intval1, unsigned intval2)
Where:
val1holds four selectable bytes
val2holds four selectable bytes.
The __sel intrinsic selects bytes from
the input parameters and returns them in the return value, ,
according to the following criteria:res
if APSR.GE[0] == 1 thenres[7:0] =val1[7:0] elseres[7:0] =val2[7:0] if APSR.GE[1] == 1 thenres[15:8] =val1[15:8] elseres[15:8] =val2[15:8] if APSR.GE[2] == 1 thenres[23:16] =val1[23:16] elseres[23:16] =val2[23:16] if APSR.GE[3] == 1 thenres[31;24] =val1[31:24] elseres=val2[31:24]
Example:
unsigned int ge_filter(unsigned int val1, unsigned int val2)
{
unsigned int res;
res = __sel(val1,val2);
return res;
}
unsigned int foo(unsigned int a, unsigned int b)
{
int res;
int filtered_res;
res = __sasx(a,b); /* This intrinsic sets the GE flags */
filtered_res = ge_filter(res); /* Filter the results of the __sasx */
/* intrinsic. Some results are filtered */
/* out based on the GE flags. */
return filtered_res;
}
Instruction summary in the Assembler Reference
SEL in the Assembler Reference.