-#define bn_pack4(a1,a2,a3,a4) 0x##a1##a2##a3##a4##ul
-#endif
-#if (BN_BYTES == 4)
-#define bn_pack4(a1,a2,a3,a4) 0x##a3##a4##ul, 0x##a1##a2##ul
-#endif
-#if (BN_BYTES == 2)
-#define bn_pack4(a1,a2,a3,a4) 0x##a4##u,0x##a3##u,0x##a2##u,0x##a1##u
+# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__)
+# define bn_pack4(a1,a2,a3,a4) 0x##a1##a2##a3##a4##UI64
+# elif defined(__arch64__)
+# define bn_pack4(a1,a2,a3,a4) 0x##a1##a2##a3##a4##UL
+# else
+# define bn_pack4(a1,a2,a3,a4) 0x##a1##a2##a3##a4##ULL
+# endif
+#elif (BN_BYTES == 4)
+# define bn_pack4(a1,a2,a3,a4) 0x##a3##a4##UL, 0x##a1##a2##UL
+#else
+# error "unsupported BN_BYTES"