x32 ABI

From Wikipedia, the free encyclopedia
Jump to: navigation, search

x32 ABI (x32 application binary interface) is an application binary interface project for Linux that allows programs to take advantage of the benefits of x86-64 (larger number of CPU registers, better floating-point performance, faster position-independent code shared libraries, function parameters passed via registers, faster Syscall instruction... ) while using 32-bit pointers and thus avoiding the overhead of 64-bit pointers.[1][2][3] Though this limits the program to a virtual address space of 4 GB it also decreases the memory footprint of the program and in some cases can allow it to run faster.[1][2][3] The best results during testing were with the 181.mcf SPEC CPU 2000 benchmark in which the x32 ABI version was 32% faster than the x86-64 version.[3][4] On average x32 is 5-8% faster on the SPEC CPU integer benchmarks compared to x86-64 but it can as likely be much slower. There is no speed advantage over x86-64 in the SPEC CPU floating point benchmarks.[5]

History [edit]

Several people had discussed the benefits of an x86-64 ABI with 32-bit pointers in the years since the Athlon 64's release in 2003, notably Donald Knuth in 2008.[6] There was little publicly visible progress towards implementing such a mode until August 27, 2011, when Hans Peter Anvin announced to the Linux kernel mailing list that he and H.J. Lu had been working on x32-ABI.[7]

That same day Linus Torvalds replied with a concern that the use of 32-bit time values in the x32 ABI could cause problems in the future.[8][9] This is because the use of 32-bit time values would cause the time values to overflow in the year 2038.[8][9] Following this request the developers of the x32 ABI changed the time values to 64-bit. [10]

A presentation at the Linux Plumbers Conference on September 7, 2011, covered the x32 ABI.[2]

The x32 ABI was merged into the Linux kernel for the 3.4 release with support being added to the GNU C Library in version 2.16.

References [edit]

  1. ^ a b Thorsten Leemhuis (2011-09-13). "Kernel Log: x32 ABI gets around 64-bit drawbacks". www.h-online.com. Retrieved 2011-11-01. 
  2. ^ a b c "x32 - a native 32-bit ABI for x86-64". linuxplumbersconf.org. Retrieved 2012-06-12. 
  3. ^ a b c "x32-abi". Google Sites. Retrieved 2011-11-01. 
  4. ^ "181.mcf SPEC CPU2000 Benchmark Description File". Standard Performance Evaluation Corporation. 1999-10-14. Retrieved 2011-11-01. 
  5. ^ H.J. Lu, H Peter Anvin, Milind Girkar (September 2011). "X32 - A Native 32bit ABI For X86-64". 
  6. ^ Donald Knuth (February 2008). "Recent News: A Flame About 64-bit Pointers". Retrieved 15 May 2012. 
  7. ^ H. Peter Anvin (27 August 2011). "RFD: x32 ABI system call numbers". Retrieved 15 May 2012. 
  8. ^ a b Jonathan Corbet (2011-08-29). "The x32 system call ABI". LWN.net. Retrieved 2011-11-01. 
  9. ^ a b Linus Torvalds (2011-08-26). "Re: RFD: x32 ABI system call numbers". LWN.net. Retrieved 2011-11-01. 
  10. ^ H.J. Lu (2011-11-24). "X32 project status update". 

External links [edit]