- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Forgot to mention (and can't figure out how to edit a post): gcc 4.7.2 and clang 3.2 both work correctly.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
It looks OK with the 14.0.1 intel64 compiler. With 13.1 it quits without generating that part of the object file.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks for looking at this. I finally upgraded to 14.0.1, and retested. While the results have changed, I do _not_ agree that is working. In fact, by some measure it has gotten worse.
The previously correct 14 register case now adds an extra move at the end.
The 15 register case repeatedly overwrites XMM15 rather than moving each register by one.
The 16 register case (-DCATASTROPHIC_ERROR) still dies with a catastrophic error.
Again, all of these work correctly in both gcc and clang: the assembly is as desired, and the 16 register case does not crash. Attached are objdump -d outputs for "{icc,gcc,clang} -msse -O2 -Wall -c icc_register_pressure_bug.c -o bug.o".

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