diff --git a/src/opus_private.h b/src/opus_private.h
index 2c5c73906d88e58ff15fb7f6370de828c1b05e90..6534a5ed75fa955c840e62adaf99c38e29eb0849 100644
--- a/src/opus_private.h
+++ b/src/opus_private.h
@@ -74,11 +74,10 @@ int encode_size(int size, unsigned char *data);
 int opus_decode_native(OpusDecoder *st, const unsigned char *data, opus_int32 len,
       opus_val16 *pcm, int frame_size, int decode_fec, int self_delimited, int *packet_offset);
 
-/* Make sure everything's aligned to 4 bytes (this may need to be increased
-   on really weird architectures) */
+/* Make sure everything's aligned to sizeof(void *) bytes */
 static inline int align(int i)
 {
-    return (i+3)&-4;
+    return (i+sizeof(void *)-1)&-sizeof(void *);
 }
 
 opus_int32 opus_repacketizer_out_range_impl(OpusRepacketizer *rp, int begin, int end, unsigned char *data, opus_int32 maxlen, int self_delimited);