Unless it's dealing with SSE SSE2 SSE3 or mmx instructions.
with gcc: just pass the -msse flag. I'm pretty sure there's a -msse2 flag, and probably an -msse3 flag as well.
However I recomend not jetisoning knowledge of the low level machine because 'The compilor will do a better job'.
I never said to completely ignore learning an assembly language. It's good to understand the architecture of the machine you're working with - but that doesn't mean you should ever DO anything in assembly.
Think about it: if you're spending too much time worrying about what to keep in registers and what to store to memory, or making sure things are .aligned properly, you're not going to be able to devote your time to making sure your ALGORITHM is efficient. At the end of the day, Algorithm efficiency gets you way more than code efficiency - the compiler is probably doing a better job than you think it is (or else you need to complain to the writer of the compiler for doing a sh*tty job on it.) A well written algorithm in Java - no wait, scratch that, Java just sucks that bad . . . a well written algorithm in <C, Ada, Delphi, LISP, take your pick> will out-perform a poorly written one in human-generated assembly code ANY DAY.
Why do you think most modern chips (besides the sh*tty x86) are using RISC architectures? They're designed to cater to the compiler, NOT the programmer.