05.02.2013 Views

ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition

ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition

ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Application Level Programmers’ Model<br />

The FPCompareEQ(), FPCompareGE() <strong>and</strong> FPCompareGT() functions are used to describe Advanced SIMD<br />

instructions that perform floating-point comparisons.<br />

// FPCompareEQ()<br />

// =============<br />

boolean FPCompareEQ(bits(32) op1, bits(32) op2, boolean fpscr_controlled)<br />

fpscr_val = if fpscr_controlled then FPSCR else St<strong>and</strong>ardFPSCRValue();<br />

(type1,sign1,value1) = FPUnpack(op1, fpscr_val);<br />

(type2,sign2,value2) = FPUnpack(op2, fpscr_val);<br />

if type1==FPType_SNaN || type1==FPType_QNaN || type2==FPType_SNaN || type2==FPType_QNaN then<br />

result = FALSE;<br />

if type1==FPType_SNaN || type2==FPType_SNaN then<br />

FPProcessException(FPExc_InvalidOp, fpscr_val);<br />

else<br />

// All non-NaN cases can be evaluated on the values produced by FPUnpack()<br />

result = (value1 == value2);<br />

return result;<br />

// FPCompareGE()<br />

// =============<br />

boolean FPCompareGE(bits(32) op1, bits(32) op2, boolean fpscr_controlled)<br />

fpscr_val = if fpscr_controlled then FPSCR else St<strong>and</strong>ardFPSCRValue();<br />

(type1,sign1,value1) = FPUnpack(op1, fpscr_val);<br />

(type2,sign2,value2) = FPUnpack(op2, fpscr_val);<br />

if type1==FPType_SNaN || type1==FPType_QNaN || type2==FPType_SNaN || type2==FPType_QNaN then<br />

result = FALSE;<br />

FPProcessException(FPExc_InvalidOp, fpscr_val);<br />

else<br />

// All non-NaN cases can be evaluated on the values produced by FPUnpack()<br />

result = (value1 >= value2);<br />

return result;<br />

// FPCompareGT()<br />

// =============<br />

boolean FPCompareGT(bits(32) op1, bits(32) op2, boolean fpscr_controlled)<br />

fpscr_val = if fpscr_controlled then FPSCR else St<strong>and</strong>ardFPSCRValue();<br />

(type1,sign1,value1) = FPUnpack(op1, fpscr_val);<br />

(type2,sign2,value2) = FPUnpack(op2, fpscr_val);<br />

if type1==FPType_SNaN || type1==FPType_QNaN || type2==FPType_SNaN || type2==FPType_QNaN then<br />

result = FALSE;<br />

FPProcessException(FPExc_InvalidOp, fpscr_val);<br />

else<br />

// All non-NaN cases can be evaluated on the values produced by FPUnpack()<br />

result = (value1 > value2);<br />

return result;<br />

A2-54 Copyright © 1996-1998, 2000, 2004-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DDI 0406B

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!