- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I have two 128-bit register xmm1, xmm2, each with 16 packed unsigned char, I want to get the absolute value of the difference between the corresponding unsigned chars, Is there an instruction to get it? Why isn't there the instruction to get it?
Link Copied
6 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Quoting - hurricanezhb
I have two 128-bit register xmm1, xmm2, each with 16 packed unsigned char, I want to get the absolute value of the difference between the corresponding unsigned chars, Is there an instruction to get it? Why isn't there the instruction to get it?
PSUBB xmm1, xmm2
PABSB xmm1, xmm2
- si the easyest way...
look at:
Intel 64 and IA-32 Architectures
Software Developers Manual
Volume 2B:
Instruction Set Reference, N-Z
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Quoting - hurricanezhb
I have two 128-bit register xmm1, xmm2, each with 16 packed unsigned char, I want to get the absolute value of the difference between the corresponding unsigned chars, Is there an instruction to get it? Why isn't there the instruction to get it?
Probably, both unsigned char and unsigned int instructions are not supported till date.
The Intel Reference document - Intel-64 & IA-32 Architectures Software Develope's Manual, Vol.2B 4-91, Order# 253667-025US only speaks about signed bytes/words/double intergers.
~BR
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Probably, both unsigned char and unsigned int instructions are not supported till date.
The Intel Reference document - Intel-64 & IA-32 Architectures Software Develope's Manual, Vol.2B 4-91, Order# 253667-025US only speaks about signed bytes/words/double intergers.
The Intel Reference document - Intel-64 & IA-32 Architectures Software Develope's Manual, Vol.2B 4-91, Order# 253667-025US only speaks about signed bytes/words/double intergers.
That probavly because data type char in C languages is the same as byte, I think. Both are 8 bits long and it doesn't mather whether it is signed or unsigned because in 2 complement logics it is the same...
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Quoting - hurricanezhb
I have two 128-bit register xmm1, xmm2, each with 16 packed unsigned char, I want to get the absolute value of the difference between the corresponding unsigned chars, Is there an instruction to get it? Why isn't there the instruction to get it?
Other sources say that abs value of the difference can be obtained by (a saturatedminus b) OR (b saturatedminus a). You can translate that into three vector operations using psubsb (subtraction using saturated arithmetic) and por.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The question is, what do you want to do, if the result overflow...
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
psubb(pmaxub(a,b), pminub(a,b))

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page