AES in a straightforward, single-block mode is generally written in a way that can be vulnerable to cache timing attacks, and potentially related attacks like Spectre. This is because the only way to get reasonable speed at AES single-block with normal code is to use lookup tables.
x86 CPUs from the last five years or so have AES-NI, and most 64-bit ARM CPUs have the ARMv8 crypto extensions. These are direct implementations of the AES round function in hardware, and are immune to timing attacks.
For CPUs a bit older than these, x86 CPUs with SSSE3 and ARMv7 CPUs with NEON (or ARMv8 CPUs without the crypto extensions, such as the Raspberry Pi 3) can use a vector permutation-based algorithm to do single-block AES in a constant time. The SSSE3 variant is implemented in OpenSSL; I don't know about ARMv7, but I know that it is possible.
On all machines, though, an efficient constant-time implementation is possible if you encrypt 8 blocks at a time. This is the "bitslicing" implementation: you simulate the individual bit operations that a hardware implementation would use. The 8 blocks at a time is for efficiency: bitslicing is considerably slower than a table-based implementation for single blocks, but you can use the width of the CPU's registers to parallelize it.
The biggest downside to bitsliced implementations comes to how you need to provide 8 blocks at a time. Certain block cipher modes cannot be parallelized for a single data stream. For example, the CBC cipher mode cannot be parallelized for encryption, because the input to the current block's cipher depends on the output of the previous block's cipher. (It can be parallelized for decryption.)
If you go the route of using a bitsliced implementation, use a cipher mode that can be parallelized. The common such modes are CTR (counter) and GCM (Galois counter mode). Galois counter mode is expensive on CPUs without hardware AES acceleration, though, due to the need to do carry-less (polynomial mod $2$) multiplication. CTR mode, in contrast, provides no integrity protection on its own, so must be accompanied by something else (such as HMAC). These are tradeoffs to consider.