Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
29234 토론

Intel graphic library routines should be updated for x64.

coolman
초급자
1,653 조회수

For example, function 

LINETOAREX

result = LINETOAREX (loc(fx), loc(fy), loc(tx) loc(ty), loc(C), loc(S), cnt)

fx

(Input) INTEGER(2). From x viewport coordinate array.

fy

(Input) INTEGER(2). From y viewport coordinate array.

tx

(Input) INTEGER(2). To x viewport coordinate array.

ty

(Input) INTEGER(2). To y viewport coordinate array.

C

(Input) INTEGER(4). Color array.

S

(Input) INTEGER(4). Style array.

cnt

(Input) INTEGER(4). Length of each coordinate array; also the length of the color array and style array. All of the arrays should be the same size.


in file ifqwin.f90, 

INTERFACE
INTEGER(2) FUNCTION LINETOAREX(PFX,PFY, PTX, PTY, PC, PS, COUNT)
!DEC$ ATTRIBUTES DEFAULT :: LINETOAREX
INTEGER(4) PFX,PFY, PTX, PTY, PC, PS, COUNT
!DEC$ ATTRIBUTES DECORATE, C, ALIAS:"_linetoarrayex" :: LINETOAREX
END FUNCTION
END INTERFACE

for x64, the red part is incorrect

 

0 포인트
1 솔루션
andrew_4619
명예로운 기여자 III
1,347 조회수

OK  LINETOAREX is an Intel creation it is not a thin wrapper to sdk graphic functions but one woudl assume under the lid it makes a series of sdk calls for some other C library.

 

There is a bug as the OP describes. The intel help show it passed with loc(var), the Intel interface does not reflect that. One can seen why despite being wrong it will still work. In X64 it will not down to the different address sizes. A throwback. Passing without loc will give an error as you will be passing arrays to a scaler so the compile will show and error (which you can set an option for  it to ignore). 

원본 게시물의 솔루션 보기

0 포인트
10 응답
Andrew_Smith
소중한 기여자 I
1,565 조회수
Those arguments are not memory addresses. So why would they need different size integers for 64 bit?
0 포인트
garraleta_fortran
초보자
1,558 조회수

How well MOVETO and LINETO work together

0 포인트
coolman
초급자
1,505 조회수

when PARALLEL implement, moveto and lineto together have to run asynchronously

0 포인트
coolman
초급자
1,509 조회수

see the call 

result = LINETOAREX (loc(fx), loc(fy), loc(tx) loc(ty), loc(C), loc(S), cnt)

0 포인트
Andrew_Smith
소중한 기여자 I
1,453 조회수
Your call is compatible with the interface declaration. The arguments are declared with the Fortran default of pass by reference
0 포인트
Andrew_Smith
소중한 기여자 I
1,451 조회수
You don't need to add loc(...) to your arguments since the address will be passed anyway in Fortran. Unless the interface specifies to pass by value
0 포인트
coolman
초급자
1,395 조회수

the call usage is from the help document. when compilered , warning #6075: The data type of the actual argument does not match the definition. [LOC]

0 포인트
garraleta_fortran
초보자
1,367 조회수

In Intel Visual Fortran Composer XE 2013 with Visual Studio 2008, it works fine in 32-bit and fails in 64-bit

0 포인트
coolman
초급자
1,282 조회수

It is very strange that the pragram can run successfully when compilered with optimization options on. 

0 포인트
andrew_4619
명예로운 기여자 III
1,348 조회수

OK  LINETOAREX is an Intel creation it is not a thin wrapper to sdk graphic functions but one woudl assume under the lid it makes a series of sdk calls for some other C library.

 

There is a bug as the OP describes. The intel help show it passed with loc(var), the Intel interface does not reflect that. One can seen why despite being wrong it will still work. In X64 it will not down to the different address sizes. A throwback. Passing without loc will give an error as you will be passing arrays to a scaler so the compile will show and error (which you can set an option for  it to ignore). 

0 포인트
응답