diff --git a/mpn/sh/add_n.asm b/mpn/sh/add_n.asm
new file mode 100644
index 0000000..ca92af0
--- /dev/null
+++ b/mpn/sh/add_n.asm
@@ -0,0 +1,47 @@
+dnl SH __gmpn_add_n -- Add two limb vectors of the same length > 0 and store
+dnl sum in a third limb vector.
+
+dnl Copyright 1995, 1997, 2000 Free Software Foundation, Inc.
+
+dnl This file is part of the GNU MP Library.
+
+dnl The GNU MP Library is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU Lesser General Public License as published by
+dnl the Free Software Foundation; either version 2.1 of the License, or (at your
+dnl option) any later version.
+
+dnl The GNU MP Library is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+dnl or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+dnl License for more details.
+
+dnl You should have received a copy of the GNU Lesser General Public License
+dnl along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
+dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+dnl MA 02110-1301, USA.
+
+include(`../config.m4')
+
+C INPUT PARAMETERS
+C res_ptr	r4
+C s1_ptr	r5
+C s2_ptr	r6
+C size		r7
+
+ASM_START()
+PROLOGUE(mpn_add_n)
+	mov	#0,r3		! clear cy save reg
+
+Loop:	mov.l	@r5+,r1
+	mov.l	@r6+,r2
+	shlr	r3		! restore cy
+	addc	r2,r1
+	movt	r3		! save cy
+	mov.l	r1,@r4
+	dt	r7
+	bf.s	Loop
+	 add	#4,r4
+
+	rts
+	mov	r3,r0		! return carry-out from most sign. limb
+EPILOGUE(mpn_add_n)
diff --git a/mpn/sh/add_n.s b/mpn/sh/add_n.s
deleted file mode 100644
index b37905c..0000000
--- a/mpn/sh/add_n.s
+++ /dev/null
@@ -1,47 +0,0 @@
-! SH __gmpn_add_n -- Add two limb vectors of the same length > 0 and store
-! sum in a third limb vector.
-
-! Copyright 1995, 1997, 2000 Free Software Foundation, Inc.
-
-! This file is part of the GNU MP Library.
-
-! The GNU MP Library is free software; you can redistribute it and/or modify
-! it under the terms of the GNU Lesser General Public License as published by
-! the Free Software Foundation; either version 2.1 of the License, or (at your
-! option) any later version.
-
-! The GNU MP Library is distributed in the hope that it will be useful, but
-! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-! or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
-! License for more details.
-
-! You should have received a copy of the GNU Lesser General Public License
-! along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
-! the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-! MA 02110-1301, USA.
-
-
-! INPUT PARAMETERS
-! res_ptr	r4
-! s1_ptr	r5
-! s2_ptr	r6
-! size		r7
-
-	.text
-	.align 2
-	.global	___gmpn_add_n
-___gmpn_add_n:
-	mov	#0,r3		! clear cy save reg
-
-Loop:	mov.l	@r5+,r1
-	mov.l	@r6+,r2
-	shlr	r3		! restore cy
-	addc	r2,r1
-	movt	r3		! save cy
-	mov.l	r1,@r4
-	dt	r7
-	bf.s	Loop
-	 add	#4,r4
-
-	rts
-	mov	r3,r0		! return carry-out from most sign. limb
diff --git a/mpn/sh/sh-defs.m4 b/mpn/sh/sh-defs.m4
new file mode 100644
index 0000000..fd89e89
--- /dev/null
+++ b/mpn/sh/sh-defs.m4
@@ -0,0 +1,14 @@
+divert(-1)
+
+define(`PROLOGUE_cpu',
+m4_assert_numargs(1)
+`	.text
+	.align	2
+	.globl	$1
+$1:')
+
+define(`EPILOGUE_cpu',
+m4_assert_numargs(1)
+`	.end	$1')
+
+divert
diff --git a/mpn/sh/sub_n.asm b/mpn/sh/sub_n.asm
new file mode 100644
index 0000000..b05036c
--- /dev/null
+++ b/mpn/sh/sub_n.asm
@@ -0,0 +1,47 @@
+dnl SH __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and store
+dnl difference in a third limb vector.
+
+dnl Copyright 1995, 1997, 2000 Free Software Foundation, Inc.
+
+dnl This file is part of the GNU MP Library.
+
+dnl The GNU MP Library is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU Lesser General Public License as published by
+dnl the Free Software Foundation; either version 2.1 of the License, or (at your
+dnl option) any later version.
+
+dnl The GNU MP Library is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+dnl or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+dnl License for more details.
+
+dnl You should have received a copy of the GNU Lesser General Public License
+dnl along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
+dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+dnl MA 02110-1301, USA.
+
+include(`../config.m4')
+
+C INPUT PARAMETERS
+C res_ptr	r4
+C s1_ptr	r5
+C s2_ptr	r6
+C size		r7
+
+ASM_START()
+PROLOGUE(mpn_sub_n)
+	mov	#0,r3		! clear cy save reg
+
+Loop:	mov.l	@r5+,r1
+	mov.l	@r6+,r2
+	shlr	r3		! restore cy
+	subc	r2,r1
+	movt	r3		! save cy
+	mov.l	r1,@r4
+	dt	r7
+	bf.s	Loop
+	 add	#4,r4
+
+	rts
+	mov	r3,r0		! return carry-out from most sign. limb
+EPILOGUE(mpn_sub_n)
diff --git a/mpn/sh/sub_n.s b/mpn/sh/sub_n.s
deleted file mode 100644
index db27a31..0000000
--- a/mpn/sh/sub_n.s
+++ /dev/null
@@ -1,47 +0,0 @@
-! SH __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and store
-! difference in a third limb vector.
-
-! Copyright 1995, 1997, 2000 Free Software Foundation, Inc.
-
-! This file is part of the GNU MP Library.
-
-! The GNU MP Library is free software; you can redistribute it and/or modify
-! it under the terms of the GNU Lesser General Public License as published by
-! the Free Software Foundation; either version 2.1 of the License, or (at your
-! option) any later version.
-
-! The GNU MP Library is distributed in the hope that it will be useful, but
-! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-! or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
-! License for more details.
-
-! You should have received a copy of the GNU Lesser General Public License
-! along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
-! the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-! MA 02110-1301, USA.
-
-
-! INPUT PARAMETERS
-! res_ptr	r4
-! s1_ptr	r5
-! s2_ptr	r6
-! size		r7
-
-	.text
-	.align 2
-	.global	___gmpn_sub_n
-___gmpn_sub_n:
-	mov	#0,r3		! clear cy save reg
-
-Loop:	mov.l	@r5+,r1
-	mov.l	@r6+,r2
-	shlr	r3		! restore cy
-	subc	r2,r1
-	movt	r3		! save cy
-	mov.l	r1,@r4
-	dt	r7
-	bf.s	Loop
-	 add	#4,r4
-
-	rts
-	mov	r3,r0		! return carry-out from most sign. limb
