I would go with x86 inline assembly and x86 assembly.
Why?
The most obvious reason: Optimization.
Yes, the compiler does a good job optimizing code but it's not always magic. Learning machine code can be helpful for:
-Understanding at a low level how things work.
-Introducing you to OS/microsystems development
-Speedup programs
-RE, is not only useful for hacking purposes (modding etc...) but sometimes you have to debug things that doesn't have debug symbols nor you have the source... have fun.
And obviously, the most important part. SIMD.
The "normal code optimizations" are done quite well by te compiler, but the compiler usually don't use SIMD. So if you learn to use that instructions (Trust me, is not easy because the documentation in some cases are a little... (hello arm))
you can speedup things to run loooot faster with SIMD, there are restrictions to the use of that instructions but you can learn them on the go.
(Note that there are macros for use SIMD without assembly)
Haskell is a good PL to learn, different and pretty fast.
P.D. Just don't try to build ALL in assembly, use C/C++, you can create symbols in a .s (assembly code) and then compile it and use the symbols (functions, etc...) directly on the c/c++ code.
Also, inline asm is a good way to program, but remember, portability will not be possible to other archs. So you would like to have two types of functions, the assembly one and code one, use IFDEF or something like that