i have no idea what is happening here. please can someone explain why
these give such different results? thanks, andrew
> cat Memory.jl
immutable Fast{U<:Unsigned}
i::U
end
+{U<:Unsigned}(a::Fast{U}, b::Fast{U}) = Fast{U}(a.i $ b.i)
immutable Slow{I<:Unsigned}
i::I
end
for (name, op) in ((:+, $),)
@eval $name{U<:Unsigned}(a::Slow{U}, b::Slow{U}) = Slow{U}($op(a.i, b.i
))
end
> julia
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "help()" to list help topics
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.3.0-prerelease+1998 (2014-03-13 01:20
UTC)
_/ |\__'_|_|_|\__'_| | Commit 9e0e3bd* (2 days old master)
|__/ | x86_64-suse-linux
julia> using Memory
Warning: requiring "Memory" did not define a corresponding module.
julia> code_native(+, (Fast{Uint8}, Fast{Uint8}))
.text
Filename: /home/andrew/.julia/v0.3/IntModN/src/Memory.jl
Source line: 5
push RBP
mov RBP, RSP
xor EDI, ESI
Source line: 5
mov AL, DIL
pop RBP
ret
julia> code_native(+, (Slow{Uint8}, Slow{Uint8}))
.text
Filename: /home/andrew/.julia/v0.3/IntModN/src/Memory.jl
Source line: 11
push RBP
mov RBP, RSP
push RBX
sub RSP, 40
mov QWORD PTR [RBP - 40], 4
Source line: 11
movabs RBX, 139916932623568
mov RAX, QWORD PTR [RBX]
mov QWORD PTR [RBP - 32], RAX
lea RAX, QWORD PTR [RBP - 40]
mov QWORD PTR [RBX], RAX
mov QWORD PTR [RBP - 16], 0
Source line: 11
mov QWORD PTR [RBP - 24], 13308928
movabs RAX, 139916939396576
call RAX
movabs RCX, 139916917454832
movzx EDI, AL
call RCX
Source line: 11
lea RSI, QWORD PTR [RBP - 24]
Source line: 11
movabs RCX, 139916917189328
mov QWORD PTR [RBP - 16], RAX
mov EDI, 29726432
mov EDX, 2
call RCX
mov AL, BYTE PTR [RAX + 8]
mov RCX, QWORD PTR [RBP - 32]
mov QWORD PTR [RBX], RCX
add RSP, 40
pop RBX
pop RBP
ret