Clipping to an arbitrary range [high, low, Clipping to an arbitrary range [high, low] -26 – Intel ARCHITECTURE IA-32 User Manual

Page 246

Advertising
background image

IA-32 Intel® Architecture Optimization

4-26

Clipping to an Arbitrary Range [high, low]

This section explains how to clip a values to a range [

high, low

].

Specifically, if the value is less than

low

or greater than

high

, then clip

to

low

or

high,

respectively. This technique uses the packed-add and

packed-subtract instructions with saturation (signed or unsigned), which
means that this technique can only be used on packed-byte and
packed-word data types.

The examples in this section use the constants

packed_max

and

packed_min

and show operations on word values. For simplicity we use

the following constants (corresponding constants are used in case the
operation is done on byte values):

packed_max

equals

0x7fff7fff7fff7fff

packed_min

equals

0x8000800080008000

packed_low

contains the value

low

in all four words of the

packed-words data type

packed_high

contains the value

high

in all four words of the

packed-words data type

packed_usmax

all values equal

1

high_us

adds the

high

value to all data elements (4 words) of

packed_min

low_us

adds the

low

value to all data elements (4 words) of

packed_min

CAUTION.

The absolute value of the most negative

number (that is, 8000 hex for 16-bit) cannot be
represented using positive numbers. This algorithm
will return the original value for the absolute value
(8000 hex).

Advertising