diff --git a/ChangeLog b/ChangeLog
index c7f66ab3c74646e0085da91e97ad93b22881f2c1..88a767aa5903fdcda50c88f2f17f72d8f93cdb9b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2012-07-12  Niels Möller  <nisse@lysator.liu.se>
+
+	* asm.m4 (ALIGN): Use << operator rather than **, with m4 eval.
+	The latter is not supported by BSD m4.
+
 2012-07-07  Niels Möller  <nisse@lysator.liu.se>
 
 	Copyright headers: Updated FSF address. Patch from David Woodhouse.
diff --git a/asm.m4 b/asm.m4
index e2721d4bdc28cd54f4d325c5577e17791ccf0b30..d632585bdb37634cb338afc301f50e178b0f38f5 100644
--- a/asm.m4
+++ b/asm.m4
@@ -23,9 +23,14 @@ define(<EPILOGUE>,
 <.size C_NAME($1), . - C_NAME($1)>,<>)>)
 
 dnl Argument to ALIGN is always logarithmic
-dnl Can't use << operator with our choice of quote characters...
+
+dnl Need changequote to be able to use the << operator (using **
+dnl instead is not portable, and is not supported by openbsd m4).
 define(<ALIGN>,
-<.align ifelse(ALIGN_LOG,yes,$1,eval(2 ** $1))>)
+<changequote([,])dnl
+.align ifelse(ALIGN_LOG,yes,$1,eval(1 << $1))dnl >> balance
+changequote(<,>)dnl
+>)
 
 dnl Struct defining macros