Skip to content

Commit 7a74a75

Browse files
authored
Merge pull request #11 from JuliaRandom/remove-deps
Remove `deps` folder and check AES-NI in `__init__()`.
2 parents c6ab42a + ef42ab2 commit 7a74a75

File tree

11 files changed

+56
-48
lines changed

11 files changed

+56
-48
lines changed

.github/workflows/build.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,12 @@ jobs:
1515
runs-on: ${{ matrix.os }}
1616
strategy:
1717
matrix:
18-
julia-version: ["1.5", "1.6", nightly]
19-
julia-arch: [x64]
18+
julia-version: ["1.5", "1.7", nightly]
19+
julia-arch: [x64, x86]
2020
os: [ubuntu-latest, windows-latest, macOS-latest]
21+
exclude:
22+
- os: macOS-latest
23+
julia-arch: x86
2124

2225
steps:
2326
- uses: actions/checkout@v2

deps/build.jl

Lines changed: 0 additions & 24 deletions
This file was deleted.

deps/has_aesni.jl

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/Random123.jl

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ module Random123
1818

1919
using RandomNumbers
2020

21-
export R123_USE_AESNI, set_counter!
21+
export set_counter!
2222
include("common.jl")
2323

2424
export Threefry2x, Threefry4x
@@ -27,15 +27,38 @@ include("threefry.jl")
2727
export Philox2x, Philox4x
2828
include("philox.jl")
2929

30-
if R123_USE_AESNI
31-
include("aesni_common.jl")
32-
export AESNI1x, AESNI4x
33-
include("aesni.jl")
30+
"True when AES-NI has been enabled."
31+
const R123_USE_AESNI = Ref(false)
32+
export R123_USE_AESNI
33+
export AESNI1x, AESNI4x
34+
export ARS1x, ARS4x
35+
include("./aesni/module.jl")
3436

35-
export ARS1x, ARS4x
36-
include("ars.jl")
37-
else
38-
@warn "AES-NI is not enabled, so AESNI and ARS are not available."
37+
function __init__()
38+
39+
R123_USE_AESNI[] = try
40+
cmd = Base.julia_cmd()
41+
push!(
42+
cmd.exec, "-e",
43+
"const __m128i = NTuple{2, VecElement{UInt64}};" *
44+
"@assert ccall(\"llvm.x86.aesni.aeskeygenassist\", " *
45+
"llvmcall, __m128i, (__m128i, UInt8), " *
46+
"__m128i((0x0123456789123450, 0x9876543210987654)), 0x1) ≡ " *
47+
"__m128i((0x857c266f7c266e85, 0x2346382146382023))"
48+
)
49+
success(cmd)
50+
catch e
51+
@show e
52+
false
53+
end
54+
55+
if R123_USE_AESNI[]
56+
@eval using ._AESNIModule
57+
else
58+
@warn "AES-NI is not enabled, so AESNI and ARS are not available."
59+
end
60+
61+
nothing
3962
end
4063

4164
end
File renamed without changes.
File renamed without changes.

src/aesni_common.jl renamed to src/aesni/common.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
using Base: llvmcall
22
import Base.(+)
33

4+
using ..Random123: R123Generator1x, R123Generator4x
5+
import ..Random123: random123_r, set_counter!
6+
47
const __m128i = NTuple{2, VecElement{UInt64}}
58
Base.convert(::Type{__m128i}, x::UInt128) = unsafe_load(Ptr{__m128i}(pointer_from_objref(Ref(x))))
69
Base.convert(::Type{UInt128}, x::__m128i) = unsafe_load(Ptr{UInt128}(pointer_from_objref(Ref(x))))

src/aesni/module.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
module _AESNIModule
2+
3+
using ..Random123
4+
5+
export __m128i, AESNIKey
6+
include("common.jl")
7+
8+
export AESNI1x, AESNI4x
9+
include("aesni.jl")
10+
11+
export ARS1x, ARS4x
12+
include("ars.jl")
13+
14+
end

src/common.jl

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,6 @@ import Libdl
22
import Random: rand, seed!
33
import RandomNumbers: AbstractRNG
44

5-
const _dep_dir = joinpath(dirname(@__FILE__), "../deps/")
6-
include_dependency(joinpath(_dep_dir, "build.log"))
7-
8-
"True when AES-NI has been enabled."
9-
const R123_USE_AESNI = isfile(joinpath(_dep_dir, "aes-ni"))
10-
115
const R123Array1x{T<:Union{UInt128}} = NTuple{1, T}
126
const R123Array2x{T<:Union{UInt32, UInt64}} = NTuple{2, T}
137
const R123Array4x{T<:Union{UInt32, UInt64}} = NTuple{4, T}

test/aesni.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
if R123_USE_AESNI
1+
if R123_USE_AESNI[]
22

33
import Random: seed!
44
using Test: @test

0 commit comments

Comments
 (0)