diff --git a/libgloss/pru/crt0.S b/libgloss/pru/crt0.S
index ad31cc9cc..cf600d6e1 100644
--- a/libgloss/pru/crt0.S
+++ b/libgloss/pru/crt0.S
@@ -60,8 +60,13 @@ ctors_loop:
 	jmp	ctors_loop
 ctors_done:
 
-	/* Just in case main() tries to access argc, argv[] and envp. */
-	zero	r14, 3 * 4
+	/* Just in case main() tries to access argc, argv[] and envp.
+	   Do not use "zero" instruction because it is not available on
+	   older cores.  Increased code size is not a concern - real
+	   firmware projects should use crt0-minrt anyway.  */
+	ldi	r14, 0
+	ldi	r15, 0
+	ldi	r16, 0
 
 	.weak __c_args__
 	ldi32	r5, __c_args__
diff --git a/libgloss/pru/syscalls.S b/libgloss/pru/syscalls.S
index 80486d1f9..1e77fc0dd 100644
--- a/libgloss/pru/syscalls.S
+++ b/libgloss/pru/syscalls.S
@@ -45,8 +45,12 @@ __SC_ret:
 	ldi32	r1, _impure_ptr
 	lbbo	r1, r1, 0, 4
 	sbbo	r14, r1, 0, 4
-	/* Return -1 (for both int32_t or int64_t).  */
-	fill	r14, 8
+	/* Return -1 (for both int32_t or int64_t).
+	   Do not use "fill" instruction because it is not available on
+	   older cores.  Increased code size is not a concern - syscalls
+	   are used only by the simulator.  */
+	ldi32	r14, -1
+	ldi32	r15, -1
 
 __SC_ret_skip_errno_set:
 	ret
