我有两个浮点操作数的比较结果如下;我需要做的是根据比较结果需要执行以下操作:即:
neon_gt_res = vcgtq_f32(temp1, temp2);
if(neon_gt_res[0]) array[0] |= (unsigned char)0x01;
if(neon_gt_res[1]) array[0] |= (unsigned char)0x02;
if(neon_gt_res[2]) array[0] |= (unsigned char)0x04;
if(neon_gt_res[3]) array[0] |= (unsigned char)0x08;
但是这样的写作再次等同于多重比较。如何在neon C内在函数中以最佳方式编写它。
在x86上,这将是array[0] |= _mm_movemask_ps(cmp_gt_res);
答案 0 :(得分:3)
<table class="x">
<tbody>
<tr class="y">
<th>Id</th>
<th>Title</th>
<th>Is valid</th>
<th>Added date</th>
<th>Expiration date</th>
</tr>
<tr>
<td>1</td>
<td>Title1</td>
<td>Yes</td>
<td>11.09.2017</td>
<td>30.09.2017</td>
</tr>
<tr>
<td>1</td>
<td>Title2</td>
<td>Yes</td>
<td>1.10.2017</td>
<td>2.11.2017</td>
</tr>
<tr>
<td>1</td>
<td>Title3</td>
<td>Yes3</td>
<td>11.11.2017</td>
<td>30.12.2017</td>
</tr>
(...)
</tbody>
</table>
你在qres的四个最低有效位上有你需要的位。
////////////////////////编辑
以上的改进版本:
vmov.i32 qmask, #1
vand qres, qmask, qres
vsra.u64 qres, qres, #30
vsli.64 dres_bottom, dres_top, #2