gcc는 amd64에서 128비트 int를 지원합니까?[복제하다]
-
29-09-2020 - |
문제
gcc는 amd64에서 128비트 int를 지원합니까?
그것을 정의하는 방법은 무엇입니까?
scanf/printf를 사용하여 읽고 쓰는 방법은 무엇입니까?
해결책
GCC 내장 지원 __int128
그리고 unsigned __int128
유형(64비트 플랫폼에만 해당)이 있지만 128비트 정수에 대한 형식 지원은 libc에서는 덜 일반적입니다.
메모: <stdint.h>
정의하다 __int128_t
그리고 __uint128_t
gcc4.6 이전 버전.또한보십시오 gcc에 128비트 정수가 있나요? gcc/clang/ICC 버전 테이블의 경우.
__uint128_t가 정의되었는지 확인하는 방법 탐지를 위해 __int128
다른 팁
void f(__int128* res, __int128* op1, __int128* op2)
{
*res = *op1 + *op2;
}
.
test.c에 저장 및 컴파일 :
$ gcc -c -O3 test.c
$ objdump -d -M intel test.o
.
가져옵니다 :
mov rcx, rdx
mov rax, [rsi]
mov rdx, [rsi+0x8]
add rax, [rcx]
adc rdx, [rcx+0x8]
mov [rdi], rax
mov [rdi+0x8], rdx
.
__int128
유형이 두 개의 64 비트를 순서대로 유지 한 다음 두 가지 명령어를 사용하여 일반적인 빅 int 패턴을 사용하여 두 개의 지침을 사용하여 수행 한 다음 ADC (캐리 포함)
제휴하지 않습니다 StackOverflow