From a7afe56d7068114d315283b8c502d2f76bf8557d Mon Sep 17 00:00:00 2001 From: mhitch Date: Tue, 17 Apr 2007 22:47:50 +0000 Subject: [PATCH] Fix polyd trapping when running pic and grn during groff tool builds on vax. From OpenBSD: Addressing mode work by Jim Uhl: - fix PC relative byte displacement in getaddr_byte - add support for word displacement to getaddr_byte This allows certain libm inverse trig functions to work on systems that lack a native polyd instruction. --- sys/arch/vax/vax/unimpl_emul.S | 35 ++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/sys/arch/vax/vax/unimpl_emul.S b/sys/arch/vax/vax/unimpl_emul.S index f59c41b58a68..b5930ec65b72 100644 --- a/sys/arch/vax/vax/unimpl_emul.S +++ b/sys/arch/vax/vax/unimpl_emul.S @@ -1,4 +1,4 @@ -/* $NetBSD: unimpl_emul.S,v 1.2 2002/02/24 01:04:27 matt Exp $ */ +/* $NetBSD: unimpl_emul.S,v 1.3 2007/04/17 22:47:50 mhitch Exp $ */ /* * Copyright (c) 2001 Brandon Creighton. All rights reserved. @@ -351,7 +351,7 @@ getaddr_byte: .word 2f-0b # 9 autoincr deferred (missing) .word 7f-0b # 10 byte disp .word 2f-0b # 11 byte disp deferred (missing) - .word 2f-0b # 12 word disp (missing) + .word 8f-0b # 12 word disp .word 2f-0b # 13 word disp deferred (missing) .word 1f-0b # 14 long disp .word 2f-0b # 15 long disp deferred (missing) @@ -382,15 +382,30 @@ getaddr_byte: 7: extzv $0, $4, (%r3), %r2 # get register incl %r3 - movl %r3, S_PC - ashl $2,%r2,%r2 - addl2 %fp,%r2 - movl (%r2),%r5 - movzbl (%r3),%r4 - movl S_PC, %r3 + movl (%fp)[%r2],%r0 # Register contents + pushl %r4 + cvtbl (%r3),%r4 + addl2 %r4,%r0 # add displacement + movl (%sp)+,%r4 + cmpl %r2,$15 # pc? + bneq 0f # no, skip + addl2 $2,%r0 # compensate for displacement size +0: incl %r3 # increase pc + brw 4f + +8: + extzv $0, $4, (%r3), %r2 # get register incl %r3 - addl3 %r4, %r5, %r0 - brw 4f + movl (%fp)[%r2],%r0 # Register contents + pushl %r4 + cvtwl (%r3),%r4 + addl2 %r4,%r0 # add displacement + movl (%sp)+,%r4 + cmpl %r2,$15 # pc? + bneq 0f # no, skip + addl2 $3,%r0 # compensate for displacement size +0: addl2 $2,%r3 # increase pc + brw 4f 6: extzv $0,$4,(%r3),%r2 # Get reg number incl %r3