diff options
Diffstat (limited to 'config/bsd/vax.c')
-rw-r--r-- | config/bsd/vax.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/config/bsd/vax.c b/config/bsd/vax.c new file mode 100644 index 0000000..52d30f9 --- /dev/null +++ b/config/bsd/vax.c @@ -0,0 +1,38 @@ +/* + * coswitch for the VAX architecture + */ + +int +coswitch (int *old_cs, int *new_cs, int first) +{ + asm ("movl 4(%ap),%r0"); + asm ("movl 8(%ap),%r1"); + asm ("movl %sp,0(%r0)"); + asm ("movl %fp,4(%r0)"); + asm ("movl %ap,8(%r0)"); + asm ("movl %r11,16(%r0)"); + asm ("movl %r10,20(%r0)"); + asm ("movl %r9,24(%r0)"); + asm ("movl %r8,28(%r0)"); + asm ("movl %r7,32(%r0)"); + asm ("movl %r6,36(%r0)"); + + if (first == 0) { /* this is the first activation */ + asm ("movl 0(%r1),%sp"); + asm ("clrl %fp"); + asm ("clrl %ap"); + new_context (0,0); + syserr ("new_context() returned in coswitch"); + } + else { + asm ("movl 0(%r1),%sp"); + asm ("movl 4(%r1),%fp"); + asm ("movl 8(%r1),%ap"); + asm ("movl 16(%r1),%r11"); + asm ("movl 20(%r1),%r10"); + asm ("movl 24(%r1),%r9"); + asm ("movl 28(%r1),%r8"); + asm ("movl 32(%r1),%r7"); + asm ("movl 36(%r1),%r6"); + } +} |