-
Notifications
You must be signed in to change notification settings - Fork 256
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Inline ASM sha1 #450
Inline ASM sha1 #450
Conversation
partially will address RustCrypto/asm-hashes#45 per #449 (comment) |
b6bd9aa
to
e65392d
Compare
@newpavlov having a little trouble getting the q6 register back into state[0..4]. I have gotten everything else done for the aarch64 implementation (well, we'll find out for sure when I can run it). Do you know the right syntax for this? Everything I've tried (state.as_mut_ptr(), state[0].as_mut_ptr(), state[0..4].as_mut_ptr().... several other iterations) says "cannot assign to this". I tried using the "v6.1s" syntax to individually assign u32s to indices and apparently those aren't valid registers for problem line in question: hashes/sha1/src/asm/aarch64.rs Line 265 in 8b8e56c
|
I am not very familiar with ARM assembly, so I can not comment on that. But pub fn compress(state: &mut [u32; 5], blocks: &[Block<Sha1Core>]) {
let [mut s0, mut s1, mut s2, mut s3, mut s4] = *state;
unsafe {
// you can use different register names
asm!(
// assembly impl
inout("q0") s0,
inout("q1") s1,
inout("q2") s2,
inout("q3") s3,
inout("q4") s4,
in("q5") blocks.as_ptr(),
in("q6") blocks.len(),
// clobbers
options(pure, nostack),
);
}
*state = [s0, s1, s2, s3, s4];
} Also note that the ARM assembly relies on instructions from the
The idea is that the choice should be made by binary crates. Otherwise it will be hard for binary crates to change it if a library unconditionally enables such feature. |
Closing as stale. Feel free to reopen it or create a new PR, if you would like to resume to work on this problem. |
draft.....