[cfe-commits] [PATCH] add x32 psABI support

Liao, Michael michael.liao at intel.com
Mon Jun 4 17:08:46 PDT 2012


Hi, Folks

There are 2 feature support patches adding X32 psABI support (https://sites.google.com/site/x32abi/), respectively to LLVM and clang. The patch to LLVM adds X32 psABI support and introduce a new 'X32' environment for x86-64 target to tell X32 psABI from LP64 psABI (i.e. the original x86-64 ABI). The patch to clang adds '-mx32' option to generate x32 binaries as well as support calling convention changes due to pointer size reduction. Please commit the patch if it seems acceptable.

This new osABI, X32 psABI, allows programs to run in the 64-bit mode but only using 32-bit pointers. Though, programs will be limited to 4GB virtual address space (not all application requires more than 4GB), X32 psABI helps reduce memory footprint and file size and allow them run faster. The following are statistics on both runtime and file size I collected with LLVM patch (plus another dragonegg patch) against CPU2000 and CPU2006. In summary, X32 psABI could boost ~10% performance from legacy 32-bit and has roughly the same performance from 64-bit app. It also reduces file size by +5% from the original x86-64 psABI and has roughly the same file size from legacy 32-bit app. Several workloads do have much better performance due to the reduction of memory footprint, e.g. 181.mcf in CINT2000, up to 100+% and 429.mcf in CINT2006, up to 30+%)

(Note the data in perf columns are the ratio to the base reference time. Data are collected on my laptop with 2.5GHz i5 CPU w/o HT and 8GB memory.)

                                        Perf                                    Size                            
CINT2000        x32     32      64      x32/32  x32/64  x32     32      64      x32/32  x32/64
===============================================================================================
164.gzip        1833    1729    1753    6.02%   4.56%   55604   55384   62073   0.40%   -10.42%
175.vpr         2501    2295    2232    8.98%   12.05%  172341  174327  185564  -1.14%  -7.13%
176.gcc         4031    3384    3532    19.12%  14.13%  1549297 1575029 1667266 -1.63%  -7.08%
181.mcf         4816    4771    2297    0.94%   109.66% 18157   18088   21218   0.38%   -14.43%
186.crafty      3571    2622    3532    36.19%  1.10%   228387  261518  243007  -12.67% -6.02%
197.parser      2418    2118    1956    14.16%  23.62%  162463  162287  179753  0.11%   -9.62%
252.eon         4077    2944    3551    38.49%  14.81%  450825  497778  470576  -9.43%  -4.20%
253.perlbmk     2975    2887    2970    3.05%   0.17%   529309  537496  566977  -1.52%  -6.64%
254.gap         3527    3201    3286    10.18%  7.33%   662043  654386  723806  1.17%   -8.53%
255.vortex      3921    3183    3828    23.19%  2.43%   644793  710252  669460  -9.22%  -3.68%
256.bzip2       2263    2054    2241    10.18%  0.98%   54008   53922   58123   0.16%   -7.08%
300.twolf       3706    3578    3388    3.58%   9.39%   223957  219748  234142  1.92%   -4.35%
-----------------------------------------------------------------------------------------------
geomean         3183    2794    2788    13.91%  14.15%  219228  225405  236945  -2.74%  -7.48%

                                        Perf                                    Size                            
CFP2000         x32     32      64      x32/32  x32/64  x32     32      64      x32/32  x32/64
===============================================================================================
168.wupwise     3417    2873    3428    18.93%  -0.32%  41970   43851   49154   -4.29%  -14.62%
171.swim        7086    7126    7105    -0.56%  -0.27%  16906   16857   18641   0.29%   -9.31%
172.mgrid       2007    1917    1982    4.69%   1.26%   21272   21224   23086   0.23%   -7.86%
173.applu       3445    3285    3241    4.87%   6.29%   67164   67124   63130   0.06%   6.39%
177.mesa        3612    2752    3597    31.25%  0.42%   570567  590889  561250  -3.44%  1.66%
178.galgel      6637    6809    6617    -2.53%  0.30%   225564  225583  233742  -0.01%  -3.50%
179.art         6710    5219    5588    28.57%  20.08%  25111   24188   28126   3.82%   -10.72%
183.equake      5247    4813    5118    9.02%   2.52%   32539   34011   31431   -4.33%  3.53%
187.facerec     4332    4072    4380    6.39%   -1.10%  82061   84290   85737   -2.64%  -4.29%
188.ammp        2632    2424    2677    8.58%   -1.68%  155976  155712  161403  0.17%   -3.36%
189.lucas       5588    3471    5301    60.99%  5.41%   63282   69200   62861   -8.55%  0.67%
191.fma3d       3574    3345    3535    6.85%   1.10%   1140557 1210044 1125430 -5.74%  1.34%
200.sixtrack    1126    1107    1120    1.72%   0.54%   1120202 1192306 1175774 -6.05%  -4.73%
301.apsi        3113    2914    3005    6.83%   3.59%   137011  137991  144108  -0.71%  -4.92%
-----------------------------------------------------------------------------------------------
geomean         3760    3350    3665    12.23%  2.60%   102995  105400  106972  -2.28%  -3.72%

                                        Perf                                    Size                            
CINT2006        x32     32      64      x32/32  x32/64  x32     32      64      x32/32  x32/64
===============================================================================================
400.perlbench   24.01   24.34   23.44   -1.34%  2.45%   1170386 1157597 1274308 1.10%   -8.16%
401.bzip2       18.07   15.91   16.22   13.59%  11.36%  81511   81424   88741   0.11%   -8.15%
403.gcc         26.75   23.48   23.69   13.94%  12.92%  3376599 3560736 3760072 -5.17%  -10.20%
429.mcf         32.13   31.56   24.44   1.79%   31.47%  18071   18002   21180   0.38%   -14.68%
445.gobmk       21.23   20.16   20.44   5.35%   3.87%   3957331 3996450 4314643 -0.98%  -8.28%
456.hmmer       13.51   12.39   13.79   9.06%   -2.02%  325607  332770  346631  -2.15%  -6.07%
458.sjeng       22.78   21.53   21.77   5.81%   4.65%   151169  153498  161067  -1.52%  -6.15%
462.libquantum  57.10   36.09   54.98   58.23%  3.86%   44078   46139   48001   -4.47%  -8.17%
464.h264ref     43.20   29.66   37.00   45.65%  16.78%  624517  606351  638083  3.00%   -2.13%
471.omnetpp     21.79   20.05   18.19   8.67%   19.79%  815698  866301  903660  -5.84%  -9.73%
473.astar       17.17   16.06   15.85   6.86%   8.32%   47740   47881   50448   -0.29%  -5.37%
483.xalancbmk   28.28   26.47   24.29   6.82%   16.42%  5859115 6016864 6301893 -2.62%  -7.03%
-----------------------------------------------------------------------------------------------
geomean         25.14   22.17   22.75   13.39%  10.48%  372433  378376  404327  -1.57%  -7.89%

                                        Perf                                    Size                            
CFP2006         x32     32      64      x32/32  x32/64  x32     32      64      x32/32  x32/64
===============================================================================================
410.bwaves      23.10   33.31   23.76   -30.66% -2.79%  36724   36677   40465   0.13%   -9.25%
416.gamess      27.75   23.15   24.85   19.87%  11.67%  9234580 9311389 9498620 -0.82%  -2.78%
433.milc        23.38   21.11   23.76   10.72%  -1.63%  143476  148267  155756  -3.23%  -7.88%
434.zeusmp      19.58   18.92   20.01   3.49%   -2.16%  264976  273096  279569  -2.97%  -5.22%
435.gromacs     13.67   12.96   13.54   5.49%   0.94%   1061640 1100340 1138544 -3.52%  -6.75%
436.cactusADM   15.51   15.78   15.42   -1.77%  0.53%   847904  869614  910019  -2.50%  -6.83%
437.leslie3d    15.90   14.65   15.35   8.60%   3.65%   102357  106347  111073  -3.75%  -7.85%
444.namd        20.02   18.20   19.91   10.06%  0.55%   333622  332808  341476  0.24%   -2.30%
447.dealII      33.17   27.53   31.54   20.49%  5.16%   3832100 3907425 4034575 -1.93%  -5.02%
450.soplex      31.03   30.43   29.93   1.97%   3.66%   428589  432496  447497  -0.90%  -4.23%
453.povray      29.21   25.47   28.01   14.70%  4.29%   1204162 1245736 1252418 -3.34%  -3.85%
454.calculix    9.77    7.78    9.60    25.67%  1.82%   1923695 1980032 1976249 -2.85%  -2.66%
459.GemsFDTD    19.61   14.92   19.66   31.41%  -0.24%  406358  430149  447996  -5.53%  -9.29%
465.tonto       18.31   14.96   18.65   22.39%  -1.81%  4674046 4724002 4875130 -1.06%  -4.12%
470.lbm         42.77   39.82   43.49   7.42%   -1.65%  19390   21372   21544   -9.27%  -10.00%
481.wrf         14.57   14.88   15.10   -2.13%  -3.54%  4956659 4873380 5270234 1.71%   -5.95%
482.sphinx3     27.12   25.69   25.82   5.55%   5.03%   213919  217765  233070  -1.77%  -8.22%
-----------------------------------------------------------------------------------------------
geomean         21.20   19.62   20.93   8.05%   1.31%   563864  578104  600126  -2.46%  -6.04%

Yours
- Michael
-------------- next part --------------
A non-text attachment was scrubbed...
Name: clang-add-x32-psABI-support.patch
Type: application/octet-stream
Size: 15707 bytes
Desc: clang-add-x32-psABI-support.patch
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120605/e638c3b6/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: llvm-add-x32-psABI-support.patch
Type: application/octet-stream
Size: 125609 bytes
Desc: llvm-add-x32-psABI-support.patch
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120605/e638c3b6/attachment-0001.obj>


More information about the cfe-commits mailing list