Fixes are available
XL C/C++ for AIX Fix Pack 4 (June 2013 PTF) for 12.1
XL C/C++ for AIX Fix Pack 5 (September 2013 PTF) for 12.1
XL C/C++ for AIX Fix Pack 7 (January 2014 PTF) for 12.1
XL C for AIX Fix Pack 8 (March 2014 PTF) for 12.1
XL C/C++ for AIX Fix Pack 8 (March 2014 PTF) for 12.1
XL C/C++ for AIX Fix Pack 11 (February 2015 PTF) for 12.1
XL C for AIX Fix Pack 12 (May 2015 PTF) for 12.1
XL C/C++ for AIX Fix Pack 12 (May 2015 PTF) for 12.1
XL C/C++ for AIX Fix Pack 13 (August 2015 Update) for 12.1
XL C/C++ for AIX Fix Pack 14 (December 2015 Update) for 12.1
XL C for AIX Fix Pack 15 (April 2016 Update) for 12.1
XL C/C++ for AIX Fix Pack 15 (April 2016 Update) for 12.1
XL C for AIX Fix Pack 16 (July 2016 Update) for 12.1
XL C/C++ for AIX Fix Pack 16 (July 2016 Update) for 12.1
XL C/C++ for AIX Fix Pack 17 (November 2016 Update) for 12.1
XL C for AIX Fix Pack 17 (November 2016 Update) for 12.1
XL C for AIX Fix Pack 18 (February 2017 Update) for 12.1
XL C/C++ for AIX Fix Pack 18 (February 2017 Update) for 12.1
XL C for AIX Fix Pack 19 (August 2017 Update) for 12.1
XL C/C++ for AIX Fix Pack 19 (August 2017 Update) for 12.1
XL C for AIX Fix Pack 20 (March 2018 Update) for 12.1
XL C/C++ for AIX Fix Pack 20 (March 2018 Update) for 12.1
XL C for AIX Fix Pack 4 (June 2013 PTF) for 12.1
XL C for AIX Fix Pack 5 (September 2013 PTF) for 12.1
XL C for AIX Fix Pack 6 (December 2013 PTF) for 12.1
XL C/C++ for AIX Fix Pack 6 (December 2013 PTF) for 12.1
XL C for AIX Fix Pack 7 (January 2014 PTF) for 12.1
XL C for AIX Fix Pack 9 (July 2014 PTF) for 12.1
XL C/C++ for AIX Fix Pack 9 (July 2014 PTF) for 12.1
XL C for AIX Fix Pack 10 (October 2014 PTF) for 12.1
XL C/C++ for AIX Fix Pack 10 (October 2014 PTF) for 12.1
XL C for AIX Fix Pack 11 (February 2015 PTF) for 12.1
XL C for AIX Fix Pack 13 (August 2015 Update) for 12.1
XL C for AIX Fix Pack 14 (December 2015 Update) for 12.1
XL C/C++ for AIX Fix Pack 21 (January 2019 Update) for 12.1
XL C for AIX Fix Pack 21 (January 2019 Update) for 12.1
APAR status
Closed as program error.
Error description
Compiler is not using lfiwax/lfiwzx assembler instruction for int to double conversion. Consider the following testcase: $cat intToDbl.C /******************************/ double intToDbl(signed int *in) { return (double)(*in); } double intToDbl(signed int in) { return (double)(in); } double uintToDbl(unsigned int *in) { return (double)(*in); } double uintToDbl(unsigned int in) { return (double)(in); } /******************************/ Compile the source file as: xlC -c -q64 -qlist -O2 intToDbl.C -qarch=pwr7 Review output in intToDbl.lst file: ... ... | 000000 PDEF intToDbl(int *) | 000000 AKA intToDbl__FPi 3| PROC in,gr3 5| 000000 lwa E8030002 1 L4A gr0=(int)(gr3,0) 5| 000004 std F801FFF0 1 ST8 #MX_CONVF1_0(gr1,-16)=gr0 5| 000008 lfd C801FFF0 1 LFL vs0=#MX_CONVF1_0(gr1,-16) 5| 00000C xscvsxdd F02005E0 1 FCFID vs1=vs0,fcr Instead, the compiler should generate a lfiwax + xscvsxdd sequence: | 000000 PDEF intToDbl(int *) | 000000 AKA intToDbl__FPi 1| PROC in,gr3 3| 000000 lfiwax 7C001EAE 1 LFIWAX vs0=(int)(gr3,0) 3| 000004 xscvsxdd F02005E0 1 FCFID vs1=vs0,fcr
Local fix
Not applicable
Problem summary
compiler does not uses lfiwax/lfiwzx instructions for int to float conversion with -q64
Problem conclusion
Relaxing the opportunity check code to use new instruction with -q64
Temporary fix
Comments
APAR Information
APAR number
IV44284
Reported component name
XL C FOR AIX
Reported component ID
5725C7100
Reported release
C10
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt
Submitted date
2013-06-17
Closed date
2013-06-17
Last modified date
2013-06-17
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
Fix information
Fixed component name
XL C FOR AIX
Fixed component ID
5725C7100
Applicable component levels
Document Information
Modified date:
01 October 2021