ユーザ用ツール

サイト用ツール


opengl:cpu64

CPU 32bit/64bit の違いのメモ

Data Size

OS (64bit) CPU arch bool char short int long long long float double void* intptr_t size_t off_t wchar_t virtual simd64 simd128 simd256
Windows 7/8 x64/amd64 64 LLP64 1/1 1/1 2/2 4/4 4/4 8/8 4/4 8/8 8/8 8/8 8/8 4/4 2/2 8/8 8/8 16/16 32/32
MacOS X 10.8 x86_64 64 LP64 1/1 1/1 2/2 4/4 8/8 8/8 4/4 8/8 8/8 8/8 8/8 8/8 4/4 8/8 8/8 16/16 32/32
Ubuntu 13.04 x86_64 64 LP64 1/1 1/1 2/2 4/4 8/8 8/8 4/4 8/8 8/8 8/8 8/8 8/8 4/4 8/8 8/8 16/16
iOS 7.0 arm64 64 LP64 1/1 1/1 2/2 4/4 8/8 8/8 4/4 8/8 8/8 8/8 8/8 8/8 4/4 8/8 8/8 16/16
Android 5.0 arm64 64 LP64 1/1 1/1 2/2 4/4 8/8 8/8 4/4 8/8 8/8 8/8 8/8 8/8 4/4 8/8 8/8 16/16
OS (32bit) CPU arch bool char short int long long long float double void* intptr_t size_t off_t wchar_t virtual simd64 simd128 simd256
Windows 7/8 x86 32 ILP32 1/1 1/1 2/2 4/4 4/4 8/8 4/4 8/8 4/4 4/4 4/4 4/4 2/2 4/4 8/8 16/16 32/32
MacOS X 10.8 i386 32 ILP32 1/1 1/1 2/2 4/4 4/4 8/8 4/4 8/8 4/4 4/4 4/4 8/8 4/4 4/4 8/8 16/16 32/32
Ubuntu 13.04 i686 32 ILP32 1/1 1/1 2/2 4/4 4/4 8/8 4/4 8/8 4/4 4/4 4/4 4/4 4/4 4/4 8/8 16/16
Ubuntu 13.04 armv7l 32 ILP32 1/1 1/1 2/2 4/4 4/4 8/8 4/4 8/8 4/4 4/4 4/4 4/4 4/4 4/4 8/8 16/16
Android 4.4 armeabi-v7a 32 ILP32 1/1 1/1 2/2 4/4 4/4 8/8 4/4 8/8 4/4 4/4 4/4 4/4 4/4 4/4 8/8 16/8
iOS 7.1 armv7 32 ILP32 1/1 1/1 2/2 4/4 4/4 8/8 4/4 8/8 4/4 4/4 4/4 8/8 4/4 4/4 8/8 16/16
  • sizeof(type) / alignof(type)
  • virtual= sizeof( struct { virtual void a(){} } )

ISA

ISA 64bit cc/os
AMD64/Intel64/EM64T x64, x86_64
ARMv8-A AArch64 arm64
PowerPC 64bit ppc64
IA-64 Itanium
ISA 32bit cc/os
IA-32 x86, i386, i686
ARMv5TE armv5te
ARMv6 armv6
ARMv7-A armv7, armv7s, armv7l
MIPS32-R1 mips
PowerPC 32bit

Function Calling convention

Windows x64

Parameter

int 64bit float 128bit
rcx (r2) xmm0
rdx (r3) xmm1
r8 xmm2
r9 xmm3

Return

int 64bit float 128bit
rax (r0) xmm0
  • 非POD や 64bit を超える戻り値は参照渡しに変換される

Saved register

rbx (r1)
rsi (r4)
rdi (r5)
rbp (r6)
rsp (r7)
r12
r13
r14
r15
xmm6-xmm15

Linux x64 (System V AMD64 ABI)

Parameter

int 64bit float 128bit
rdi (r5) xmm0
rsi (r4) xmm1
rdx (r3) xmm2
rcx (r2) xmm3
r8 xmm4
r9 xmm5
xmm6
xmm7

Return

int 64bit float 128bit
rax (r0) xmm0
rdx (r3) xmm1
  • 非POD の戻り値は参照渡しに変換される。rdi → rax

Saved register

rbx (r1)
rsp (r6)
rbp (r7)
r12
r13
r14
r15

ARM64 ARMv8 AArch64

Parameter

int 64bit float 128bit
r0 v0
r1 v1
r2 v2
r3 v3
r4 v4
r5 v5
r6 v6
r7 v7

Return

int 64bit float 128bit
r0 v0

Saved register

r19-r29, sp v8-v15

AArch32

r9 (sb)
r10 (sl)
r11 (fp)
r12 (ip)
r13 (sp)
r14 (lr)
r15 (pc)
opengl/cpu64.txt · 最終更新: 2014/11/08 23:08 by oga