code changes for new RISC-V GCC toolchain
authorAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>
Sun, 23 Oct 2011 06:42:18 +0000 (23:42 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 01:28:04 +0000 (18:28 -0700)
kern/arch/riscv/boot.S
kern/arch/riscv/entry.S
kern/arch/riscv/env.c
kern/arch/riscv/kernel.ld
kern/arch/riscv/pcr.h
kern/arch/riscv/trap.c
kern/arch/riscv/trap.h

index f45a9f1..5230375 100644 (file)
@@ -25,67 +25,64 @@ _start:
 
   // set up trap entry point.  this is not a relocated address, as we
   // do not support trapping before the MMU is set up.
 
   // set up trap entry point.  this is not a relocated address, as we
   // do not support trapping before the MMU is set up.
-  la     $t0, trap_entry
-  mtpcr  $t0, ASM_CR(PCR_EVEC)
+  la     t0, trap_entry
+  mtpcr  t0, ASM_CR(PCR_EVEC)
 
   // enable traps
 
   // enable traps
-  li     $t0, SR_S | SR_ET | SR_SX
-  mtpcr  $t0, ASM_CR(PCR_SR)
+  li     t0, SR_S | SR_ET | SR_SX
+  mtpcr  t0, ASM_CR(PCR_SR)
 
   // core 0?
 
   // core 0?
-  mfpcr  $t0, ASM_CR(PCR_COREID)
-  bnez   $t0, notcore0
+  mfpcr  t0, ASM_CR(PCR_COREID)
+  bnez   t0, notcore0
 
 
-  // set up stack and terminate frame pointer for backtracing
-  li     $fp, 0
-  la     $sp, bootstacktop
-  li     $t1, KERN_LOAD_ADDR
-  sub    $sp, $sp, $t1
+  // set up stack
+  la     sp, bootstacktop
+  li     t1, KERN_LOAD_ADDR
+  sub    sp, sp, t1
 
   // set up initial page mappings
 
   // set up initial page mappings
-  la     $a0, l1pt
-  sub    $a0, $a0, $t1
-  la     $a1, l1pt_boot
-  sub    $a1, $a1, $t1
+  la     a0, l1pt
+  sub    a0, a0, t1
+  la     a1, l1pt_boot
+  sub    a1, a1, t1
 #ifdef __riscv64
 #ifdef __riscv64
-  la     $a2, l2pt_kernbase
-  sub    $a2, $a2, $t1
-  la     $a3, l2pt_load
-  sub    $a3, $a3, $t1
+  la     a2, l2pt_kernbase
+  sub    a2, a2, t1
+  la     a3, l2pt_load
+  sub    a3, a3, t1
 #endif
   jal    pagetable_init
 
   // turn on MMU
 #endif
   jal    pagetable_init
 
   // turn on MMU
-  la     $a0, l1pt_boot
-  sub    $a0, $a0, $t1
+  la     a0, l1pt_boot
+  sub    a0, a0, t1
   jal    mmu_init
 
   // relocate stack and call into C code using absolute jump, not pc-relative
   jal    mmu_init
 
   // relocate stack and call into C code using absolute jump, not pc-relative
-  la     $sp, bootstacktop
-  lui    $t0, %hi(cmain)
-  jalr.j $t0, %lo(cmain)
+  la     sp, bootstacktop
+  lui    t0, %hi(cmain)
+  jalr.j t0, %lo(cmain)
 
 notcore0:
 
 notcore0:
-  // set up stack and terminate frame pointer for backtracing
-  // sp = percoore_stacks+(core_id()+1)*KSTKSIZE
-  li     $fp, 0
-  la     $sp, percore_stacks
-  add    $t0, $t0, 1
-  sll    $t0, $t0, KSTKSHIFT
-  add    $sp, $sp, $t0
-  li     $t1, KERN_LOAD_ADDR
-  sub    $sp, $sp, $t1
+  // set up stack: sp = percoore_stacks+(core_id()+1)*KSTKSIZE
+  la     sp, percore_stacks
+  add    t0, t0, 1
+  sll    t0, t0, KSTKSHIFT
+  add    sp, sp, t0
+  li     t1, KERN_LOAD_ADDR
+  sub    sp, sp, t1
   
   // turn on MMU
   
   // turn on MMU
-  la     $a0, l1pt_boot
-  sub    $a0, $a0, $t1
+  la     a0, l1pt_boot
+  sub    a0, a0, t1
   jal    mmu_init
 
   // relocate stack and call into C code
   jal    mmu_init
 
   // relocate stack and call into C code
-  li     $t1, KERN_LOAD_ADDR
-  add    $sp, $sp, $t1
-  lui    $t0, %hi(smp_init)
-  jalr.j $t0, %lo(smp_init)
+  li     t1, KERN_LOAD_ADDR
+  add    sp, sp, t1
+  lui    t0, %hi(smp_init)
+  jalr.j t0, %lo(smp_init)
 
 .end _start
 ///////////////////////////////////////////////////////////////////
 
 .end _start
 ///////////////////////////////////////////////////////////////////
index 0c68ce5..eb25f97 100644 (file)
   .ent    save_kernel_tf_asm
   .global save_kernel_tf_asm
 save_kernel_tf_asm:
   .ent    save_kernel_tf_asm
   .global save_kernel_tf_asm
 save_kernel_tf_asm:
-  STORE  $s0,20*REGBYTES($a0)
-  STORE  $s1,21*REGBYTES($a0)
-  STORE  $s2,22*REGBYTES($a0)
-  STORE  $s3,23*REGBYTES($a0)
-  STORE  $s4,24*REGBYTES($a0)
-  STORE  $s5,25*REGBYTES($a0)
-  STORE  $s6,26*REGBYTES($a0)
-  STORE  $s7,27*REGBYTES($a0)
-  STORE  $s8,28*REGBYTES($a0)
-  STORE  $s9,29*REGBYTES($a0)
-  STORE  $sp,30*REGBYTES($a0)
-
-  mfpcr  $t0,ASM_CR(PCR_SR)
-  STORE  $t0,32*REGBYTES($a0)
+  STORE  s0,20*REGBYTES(a0)
+  STORE  s1,21*REGBYTES(a0)
+  STORE  s2,22*REGBYTES(a0)
+  STORE  s3,23*REGBYTES(a0)
+  STORE  s4,24*REGBYTES(a0)
+  STORE  s5,25*REGBYTES(a0)
+  STORE  s6,26*REGBYTES(a0)
+  STORE  s7,27*REGBYTES(a0)
+  STORE  s8,28*REGBYTES(a0)
+  STORE  s9,29*REGBYTES(a0)
+  STORE  sp,30*REGBYTES(a0)
+
+  mfpcr  t0,ASM_CR(PCR_SR)
+  STORE  t0,32*REGBYTES(a0)
 
   # set EPC to this function's return address
 
   # set EPC to this function's return address
-  STORE  $ra,33*REGBYTES($x2)
+  STORE  ra,33*REGBYTES(x2)
 
   .end  save_kernel_tf_asm
 
 
   .end  save_kernel_tf_asm
 
@@ -39,22 +39,22 @@ save_kernel_tf_asm:
   .ent    pop_kernel_tf
   .global pop_kernel_tf
 pop_kernel_tf:
   .ent    pop_kernel_tf
   .global pop_kernel_tf
 pop_kernel_tf:
-  LOAD  $t0,32*REGBYTES($a0)
-  LOAD  $ra,33*REGBYTES($x2)
-
-  LOAD  $s0,20*REGBYTES($a0)
-  LOAD  $s1,21*REGBYTES($a0)
-  LOAD  $s2,22*REGBYTES($a0)
-  LOAD  $s3,23*REGBYTES($a0)
-  LOAD  $s4,24*REGBYTES($a0)
-  LOAD  $s5,25*REGBYTES($a0)
-  LOAD  $s6,26*REGBYTES($a0)
-  LOAD  $s7,27*REGBYTES($a0)
-  LOAD  $s8,28*REGBYTES($a0)
-  LOAD  $s9,29*REGBYTES($a0)
-  LOAD  $sp,30*REGBYTES($a0)
-
-  mtpcr  $t0,ASM_CR(PCR_SR)
+  LOAD  t0,32*REGBYTES(a0)
+  LOAD  ra,33*REGBYTES(x2)
+
+  LOAD  s0,20*REGBYTES(a0)
+  LOAD  s1,21*REGBYTES(a0)
+  LOAD  s2,22*REGBYTES(a0)
+  LOAD  s3,23*REGBYTES(a0)
+  LOAD  s4,24*REGBYTES(a0)
+  LOAD  s5,25*REGBYTES(a0)
+  LOAD  s6,26*REGBYTES(a0)
+  LOAD  s7,27*REGBYTES(a0)
+  LOAD  s8,28*REGBYTES(a0)
+  LOAD  s9,29*REGBYTES(a0)
+  LOAD  sp,30*REGBYTES(a0)
+
+  mtpcr  t0,ASM_CR(PCR_SR)
        ret
 
   .end  pop_kernel_tf
        ret
 
   .end  pop_kernel_tf
@@ -63,60 +63,60 @@ pop_kernel_tf:
 save_tf:  # write the trap frame onto the stack
 
   # save gprs
 save_tf:  # write the trap frame onto the stack
 
   # save gprs
-  STORE  $x3,3*REGBYTES($x2)
-  STORE  $x4,4*REGBYTES($x2)
-  STORE  $x5,5*REGBYTES($x2)
-  STORE  $x6,6*REGBYTES($x2)
-  STORE  $x7,7*REGBYTES($x2)
-  STORE  $x8,8*REGBYTES($x2)
-  STORE  $x9,9*REGBYTES($x2)
-  STORE  $x10,10*REGBYTES($x2)
-  STORE  $x11,11*REGBYTES($x2)
-  STORE  $x12,12*REGBYTES($x2)
-  STORE  $x13,13*REGBYTES($x2)
-  STORE  $x14,14*REGBYTES($x2)
-  STORE  $x15,15*REGBYTES($x2)
-  STORE  $x16,16*REGBYTES($x2)
-  STORE  $x17,17*REGBYTES($x2)
-  STORE  $x18,18*REGBYTES($x2)
-  STORE  $x19,19*REGBYTES($x2)
-  STORE  $x20,20*REGBYTES($x2)
-  STORE  $x21,21*REGBYTES($x2)
-  STORE  $x22,22*REGBYTES($x2)
-  STORE  $x23,23*REGBYTES($x2)
-  STORE  $x24,24*REGBYTES($x2)
-  STORE  $x25,25*REGBYTES($x2)
-  STORE  $x26,26*REGBYTES($x2)
-  STORE  $x27,27*REGBYTES($x2)
-  STORE  $x28,28*REGBYTES($x2)
-  STORE  $x29,29*REGBYTES($x2)
-  STORE  $x30,30*REGBYTES($x2)
-  STORE  $x31,31*REGBYTES($x2)
-
-  mfpcr  $x3,ASM_CR(PCR_K0)
-  STORE  $x3,1*REGBYTES($x2)          # $x1 is in $PCR_K0
-  mfpcr  $x3,ASM_CR(PCR_K1)
-  STORE  $x3,2*REGBYTES($x2)          # $x2 is in $PCR_K1
+  STORE  x3,3*REGBYTES(x2)
+  STORE  x4,4*REGBYTES(x2)
+  STORE  x5,5*REGBYTES(x2)
+  STORE  x6,6*REGBYTES(x2)
+  STORE  x7,7*REGBYTES(x2)
+  STORE  x8,8*REGBYTES(x2)
+  STORE  x9,9*REGBYTES(x2)
+  STORE  x10,10*REGBYTES(x2)
+  STORE  x11,11*REGBYTES(x2)
+  STORE  x12,12*REGBYTES(x2)
+  STORE  x13,13*REGBYTES(x2)
+  STORE  x14,14*REGBYTES(x2)
+  STORE  x15,15*REGBYTES(x2)
+  STORE  x16,16*REGBYTES(x2)
+  STORE  x17,17*REGBYTES(x2)
+  STORE  x18,18*REGBYTES(x2)
+  STORE  x19,19*REGBYTES(x2)
+  STORE  x20,20*REGBYTES(x2)
+  STORE  x21,21*REGBYTES(x2)
+  STORE  x22,22*REGBYTES(x2)
+  STORE  x23,23*REGBYTES(x2)
+  STORE  x24,24*REGBYTES(x2)
+  STORE  x25,25*REGBYTES(x2)
+  STORE  x26,26*REGBYTES(x2)
+  STORE  x27,27*REGBYTES(x2)
+  STORE  x28,28*REGBYTES(x2)
+  STORE  x29,29*REGBYTES(x2)
+  STORE  x30,30*REGBYTES(x2)
+  STORE  x31,31*REGBYTES(x2)
+
+  mfpcr  x3,ASM_CR(PCR_K0)
+  STORE  x3,1*REGBYTES(x2)          # x1 is in PCR_K0
+  mfpcr  x3,ASM_CR(PCR_K1)
+  STORE  x3,2*REGBYTES(x2)          # x2 is in PCR_K1
 
   # get sr, epc, badvaddr, cause
 
   # get sr, epc, badvaddr, cause
-  mfpcr  $x3,ASM_CR(PCR_SR)          # sr
-  STORE  $x3,32*REGBYTES($x2)
-  mfpcr  $x4,ASM_CR(PCR_EPC)          # epc
-  STORE  $x4,33*REGBYTES($x2)
-  mfpcr  $x3,ASM_CR(PCR_BADVADDR)      # badvaddr
-  STORE  $x3,34*REGBYTES($x2)
-  mfpcr  $x3,ASM_CR(PCR_CAUSE)        # cause
-  STORE  $x3,35*REGBYTES($x2)
+  mfpcr  x3,ASM_CR(PCR_SR)          # sr
+  STORE  x3,32*REGBYTES(x2)
+  mfpcr  x4,ASM_CR(PCR_EPC)          # epc
+  STORE  x4,33*REGBYTES(x2)
+  mfpcr  x3,ASM_CR(PCR_BADVADDR)      # badvaddr
+  STORE  x3,34*REGBYTES(x2)
+  mfpcr  x3,ASM_CR(PCR_CAUSE)        # cause
+  STORE  x3,35*REGBYTES(x2)
 
   # get faulting insn, if it wasn't a fetch-related trap
 
   # get faulting insn, if it wasn't a fetch-related trap
-  li    $x5, CAUSE_MISALIGNED_FETCH
-  li    $x6, CAUSE_FAULT_FETCH
-  beq   $x3, $x5, 1f
-  beq   $x3, $x6, 1f
-  lh    $x3,0($x4)
-  lh    $x4,2($x4)
-  sh    $x3,  36*REGBYTES($x2)
-  sh    $x4,2+36*REGBYTES($x2)
+  li    x5, CAUSE_MISALIGNED_FETCH
+  li    x6, CAUSE_FAULT_FETCH
+  beq   x3, x5, 1f
+  beq   x3, x6, 1f
+  lh    x3,0(x4)
+  lh    x4,2(x4)
+  sh    x3,  36*REGBYTES(x2)
+  sh    x4,2+36*REGBYTES(x2)
 1:
   ret
   .end  save_tf
 1:
   ret
   .end  save_tf
@@ -125,67 +125,67 @@ save_tf:  # write the trap frame onto the stack
   .ent  env_pop_tf
 env_pop_tf:  # write the trap frame onto the stack
   # restore gprs
   .ent  env_pop_tf
 env_pop_tf:  # write the trap frame onto the stack
   # restore gprs
-  LOAD  $t0,32*REGBYTES($a0)  # restore sr (should disable interrupts)
-  mtpcr  $t0,ASM_CR(PCR_SR)
-
-  LOAD  $x1,1*REGBYTES($a0)
-  mtpcr  $x1,ASM_CR(PCR_K0)
-  LOAD  $x1,2*REGBYTES($a0)
-  mtpcr $x1,ASM_CR(PCR_K1)
-  move  $x1,$a0
-  LOAD  $x3,3*REGBYTES($x1)
-  LOAD  $x4,4*REGBYTES($x1)
-  LOAD  $x5,5*REGBYTES($x1)
-  LOAD  $x6,6*REGBYTES($x1)
-  LOAD  $x7,7*REGBYTES($x1)
-  LOAD  $x8,8*REGBYTES($x1)
-  LOAD  $x9,9*REGBYTES($x1)
-  LOAD  $x10,10*REGBYTES($x1)
-  LOAD  $x11,11*REGBYTES($x1)
-  LOAD  $x12,12*REGBYTES($x1)
-  LOAD  $x13,13*REGBYTES($x1)
-  LOAD  $x14,14*REGBYTES($x1)
-  LOAD  $x15,15*REGBYTES($x1)
-  LOAD  $x16,16*REGBYTES($x1)
-  LOAD  $x17,17*REGBYTES($x1)
-  LOAD  $x18,18*REGBYTES($x1)
-  LOAD  $x19,19*REGBYTES($x1)
-  LOAD  $x20,20*REGBYTES($x1)
-  LOAD  $x21,21*REGBYTES($x1)
-  LOAD  $x22,22*REGBYTES($x1)
-  LOAD  $x23,23*REGBYTES($x1)
-  LOAD  $x24,24*REGBYTES($x1)
-  LOAD  $x25,25*REGBYTES($x1)
-  LOAD  $x26,26*REGBYTES($x1)
-  LOAD  $x27,27*REGBYTES($x1)
-  LOAD  $x28,28*REGBYTES($x1)
-  LOAD  $x29,29*REGBYTES($x1)
-  LOAD  $x30,30*REGBYTES($x1)
-  LOAD  $x31,31*REGBYTES($x1)
+  LOAD  t0,32*REGBYTES(a0)  # restore sr (should disable interrupts)
+  mtpcr  t0,ASM_CR(PCR_SR)
+
+  LOAD  x1,1*REGBYTES(a0)
+  mtpcr  x1,ASM_CR(PCR_K0)
+  LOAD  x1,2*REGBYTES(a0)
+  mtpcr x1,ASM_CR(PCR_K1)
+  move  x1,a0
+  LOAD  x3,3*REGBYTES(x1)
+  LOAD  x4,4*REGBYTES(x1)
+  LOAD  x5,5*REGBYTES(x1)
+  LOAD  x6,6*REGBYTES(x1)
+  LOAD  x7,7*REGBYTES(x1)
+  LOAD  x8,8*REGBYTES(x1)
+  LOAD  x9,9*REGBYTES(x1)
+  LOAD  x10,10*REGBYTES(x1)
+  LOAD  x11,11*REGBYTES(x1)
+  LOAD  x12,12*REGBYTES(x1)
+  LOAD  x13,13*REGBYTES(x1)
+  LOAD  x14,14*REGBYTES(x1)
+  LOAD  x15,15*REGBYTES(x1)
+  LOAD  x16,16*REGBYTES(x1)
+  LOAD  x17,17*REGBYTES(x1)
+  LOAD  x18,18*REGBYTES(x1)
+  LOAD  x19,19*REGBYTES(x1)
+  LOAD  x20,20*REGBYTES(x1)
+  LOAD  x21,21*REGBYTES(x1)
+  LOAD  x22,22*REGBYTES(x1)
+  LOAD  x23,23*REGBYTES(x1)
+  LOAD  x24,24*REGBYTES(x1)
+  LOAD  x25,25*REGBYTES(x1)
+  LOAD  x26,26*REGBYTES(x1)
+  LOAD  x27,27*REGBYTES(x1)
+  LOAD  x28,28*REGBYTES(x1)
+  LOAD  x29,29*REGBYTES(x1)
+  LOAD  x30,30*REGBYTES(x1)
+  LOAD  x31,31*REGBYTES(x1)
 
   # gtfo!
 
   # gtfo!
-  LOAD  $x2,33*REGBYTES($x1)
-  mtpcr $x2,ASM_CR(PCR_EPC)
-  mfpcr $x1,ASM_CR(PCR_K0)
-  mfpcr $x2,ASM_CR(PCR_K1)
+  LOAD  x2,33*REGBYTES(x1)
+  mtpcr x2,ASM_CR(PCR_EPC)
+  mfpcr x1,ASM_CR(PCR_K0)
+  mfpcr x2,ASM_CR(PCR_K1)
   eret
   .end  env_pop_tf
 
   .global  trap_entry
   .ent  trap_entry
 trap_entry:
   eret
   .end  env_pop_tf
 
   .global  trap_entry
   .ent  trap_entry
 trap_entry:
-  mtpcr $ra,ASM_CR(PCR_K0)
-  mtpcr $x2,ASM_CR(PCR_K1)
+  mtpcr ra,ASM_CR(PCR_K0)
+  mtpcr x2,ASM_CR(PCR_K1)
 
   # when coming from kernel, continue below its stack
 
   # when coming from kernel, continue below its stack
-  mfpcr $ra,ASM_CR(PCR_SR)
-  and   $ra,$ra,SR_PS
-  add   $x2, $sp, -SIZEOF_TRAPFRAME_T
-  bnez  $ra, 1f
-  la    $x2,bootstacktop-SIZEOF_TRAPFRAME_T
+  mfpcr ra,ASM_CR(PCR_SR)
+  and   ra,ra,SR_PS
+  add   x2, sp, -SIZEOF_TRAPFRAME_T
+  bnez  ra, 1f
+  la    x2,bootstacktop-SIZEOF_TRAPFRAME_T
 
 1:jal   save_tf
 
 1:jal   save_tf
-  move  $sp,$x2
-  move  $a0,$x2
+  move  sp,x2
+  move  a0,x2
   jal    handle_trap
   .end  trap_entry
   jal    handle_trap
   .end  trap_entry
index 4f4fb4a..b5653d2 100644 (file)
@@ -19,38 +19,38 @@ save_fp_state(ancillary_state_t* silly)
 
        asm("mffsr %0" : "=r"(silly->fsr));
 
 
        asm("mffsr %0" : "=r"(silly->fsr));
 
-       asm("fsd $f0,%0" : "=m"(silly->fpr[0]));
-       asm("fsd $f1,%0" : "=m"(silly->fpr[1]));
-       asm("fsd $f2,%0" : "=m"(silly->fpr[2]));
-       asm("fsd $f3,%0" : "=m"(silly->fpr[3]));
-       asm("fsd $f4,%0" : "=m"(silly->fpr[4]));
-       asm("fsd $f5,%0" : "=m"(silly->fpr[5]));
-       asm("fsd $f6,%0" : "=m"(silly->fpr[6]));
-       asm("fsd $f7,%0" : "=m"(silly->fpr[7]));
-       asm("fsd $f8,%0" : "=m"(silly->fpr[8]));
-       asm("fsd $f9,%0" : "=m"(silly->fpr[9]));
-       asm("fsd $f10,%0" : "=m"(silly->fpr[10]));
-       asm("fsd $f11,%0" : "=m"(silly->fpr[11]));
-       asm("fsd $f12,%0" : "=m"(silly->fpr[12]));
-       asm("fsd $f13,%0" : "=m"(silly->fpr[13]));
-       asm("fsd $f14,%0" : "=m"(silly->fpr[14]));
-       asm("fsd $f15,%0" : "=m"(silly->fpr[15]));
-       asm("fsd $f16,%0" : "=m"(silly->fpr[16]));
-       asm("fsd $f17,%0" : "=m"(silly->fpr[17]));
-       asm("fsd $f18,%0" : "=m"(silly->fpr[18]));
-       asm("fsd $f19,%0" : "=m"(silly->fpr[19]));
-       asm("fsd $f20,%0" : "=m"(silly->fpr[20]));
-       asm("fsd $f21,%0" : "=m"(silly->fpr[21]));
-       asm("fsd $f22,%0" : "=m"(silly->fpr[22]));
-       asm("fsd $f23,%0" : "=m"(silly->fpr[23]));
-       asm("fsd $f24,%0" : "=m"(silly->fpr[24]));
-       asm("fsd $f25,%0" : "=m"(silly->fpr[25]));
-       asm("fsd $f26,%0" : "=m"(silly->fpr[26]));
-       asm("fsd $f27,%0" : "=m"(silly->fpr[27]));
-       asm("fsd $f28,%0" : "=m"(silly->fpr[28]));
-       asm("fsd $f29,%0" : "=m"(silly->fpr[29]));
-       asm("fsd $f30,%0" : "=m"(silly->fpr[30]));
-       asm("fsd $f31,%0" : "=m"(silly->fpr[31]));
+       asm("fsd f0,%0" : "=m"(silly->fpr[0]));
+       asm("fsd f1,%0" : "=m"(silly->fpr[1]));
+       asm("fsd f2,%0" : "=m"(silly->fpr[2]));
+       asm("fsd f3,%0" : "=m"(silly->fpr[3]));
+       asm("fsd f4,%0" : "=m"(silly->fpr[4]));
+       asm("fsd f5,%0" : "=m"(silly->fpr[5]));
+       asm("fsd f6,%0" : "=m"(silly->fpr[6]));
+       asm("fsd f7,%0" : "=m"(silly->fpr[7]));
+       asm("fsd f8,%0" : "=m"(silly->fpr[8]));
+       asm("fsd f9,%0" : "=m"(silly->fpr[9]));
+       asm("fsd f10,%0" : "=m"(silly->fpr[10]));
+       asm("fsd f11,%0" : "=m"(silly->fpr[11]));
+       asm("fsd f12,%0" : "=m"(silly->fpr[12]));
+       asm("fsd f13,%0" : "=m"(silly->fpr[13]));
+       asm("fsd f14,%0" : "=m"(silly->fpr[14]));
+       asm("fsd f15,%0" : "=m"(silly->fpr[15]));
+       asm("fsd f16,%0" : "=m"(silly->fpr[16]));
+       asm("fsd f17,%0" : "=m"(silly->fpr[17]));
+       asm("fsd f18,%0" : "=m"(silly->fpr[18]));
+       asm("fsd f19,%0" : "=m"(silly->fpr[19]));
+       asm("fsd f20,%0" : "=m"(silly->fpr[20]));
+       asm("fsd f21,%0" : "=m"(silly->fpr[21]));
+       asm("fsd f22,%0" : "=m"(silly->fpr[22]));
+       asm("fsd f23,%0" : "=m"(silly->fpr[23]));
+       asm("fsd f24,%0" : "=m"(silly->fpr[24]));
+       asm("fsd f25,%0" : "=m"(silly->fpr[25]));
+       asm("fsd f26,%0" : "=m"(silly->fpr[26]));
+       asm("fsd f27,%0" : "=m"(silly->fpr[27]));
+       asm("fsd f28,%0" : "=m"(silly->fpr[28]));
+       asm("fsd f29,%0" : "=m"(silly->fpr[29]));
+       asm("fsd f30,%0" : "=m"(silly->fpr[30]));
+       asm("fsd f31,%0" : "=m"(silly->fpr[31]));
 
        mtpcr(PCR_SR, sr);
 }
 
        mtpcr(PCR_SR, sr);
 }
@@ -70,38 +70,38 @@ restore_fp_state(ancillary_state_t* silly)
 
        asm("mtfsr %0" : : "r"(silly->fsr));
 
 
        asm("mtfsr %0" : : "r"(silly->fsr));
 
-       asm("fld $f0,%0" : : "m"(silly->fpr[0]));
-       asm("fld $f1,%0" : : "m"(silly->fpr[1]));
-       asm("fld $f2,%0" : : "m"(silly->fpr[2]));
-       asm("fld $f3,%0" : : "m"(silly->fpr[3]));
-       asm("fld $f4,%0" : : "m"(silly->fpr[4]));
-       asm("fld $f5,%0" : : "m"(silly->fpr[5]));
-       asm("fld $f6,%0" : : "m"(silly->fpr[6]));
-       asm("fld $f7,%0" : : "m"(silly->fpr[7]));
-       asm("fld $f8,%0" : : "m"(silly->fpr[8]));
-       asm("fld $f9,%0" : : "m"(silly->fpr[9]));
-       asm("fld $f10,%0" : : "m"(silly->fpr[10]));
-       asm("fld $f11,%0" : : "m"(silly->fpr[11]));
-       asm("fld $f12,%0" : : "m"(silly->fpr[12]));
-       asm("fld $f13,%0" : : "m"(silly->fpr[13]));
-       asm("fld $f14,%0" : : "m"(silly->fpr[14]));
-       asm("fld $f15,%0" : : "m"(silly->fpr[15]));
-       asm("fld $f16,%0" : : "m"(silly->fpr[16]));
-       asm("fld $f17,%0" : : "m"(silly->fpr[17]));
-       asm("fld $f18,%0" : : "m"(silly->fpr[18]));
-       asm("fld $f19,%0" : : "m"(silly->fpr[19]));
-       asm("fld $f20,%0" : : "m"(silly->fpr[20]));
-       asm("fld $f21,%0" : : "m"(silly->fpr[21]));
-       asm("fld $f22,%0" : : "m"(silly->fpr[22]));
-       asm("fld $f23,%0" : : "m"(silly->fpr[23]));
-       asm("fld $f24,%0" : : "m"(silly->fpr[24]));
-       asm("fld $f25,%0" : : "m"(silly->fpr[25]));
-       asm("fld $f26,%0" : : "m"(silly->fpr[26]));
-       asm("fld $f27,%0" : : "m"(silly->fpr[27]));
-       asm("fld $f28,%0" : : "m"(silly->fpr[28]));
-       asm("fld $f29,%0" : : "m"(silly->fpr[29]));
-       asm("fld $f30,%0" : : "m"(silly->fpr[30]));
-       asm("fld $f31,%0" : : "m"(silly->fpr[31]));
+       asm("fld f0,%0" : : "m"(silly->fpr[0]));
+       asm("fld f1,%0" : : "m"(silly->fpr[1]));
+       asm("fld f2,%0" : : "m"(silly->fpr[2]));
+       asm("fld f3,%0" : : "m"(silly->fpr[3]));
+       asm("fld f4,%0" : : "m"(silly->fpr[4]));
+       asm("fld f5,%0" : : "m"(silly->fpr[5]));
+       asm("fld f6,%0" : : "m"(silly->fpr[6]));
+       asm("fld f7,%0" : : "m"(silly->fpr[7]));
+       asm("fld f8,%0" : : "m"(silly->fpr[8]));
+       asm("fld f9,%0" : : "m"(silly->fpr[9]));
+       asm("fld f10,%0" : : "m"(silly->fpr[10]));
+       asm("fld f11,%0" : : "m"(silly->fpr[11]));
+       asm("fld f12,%0" : : "m"(silly->fpr[12]));
+       asm("fld f13,%0" : : "m"(silly->fpr[13]));
+       asm("fld f14,%0" : : "m"(silly->fpr[14]));
+       asm("fld f15,%0" : : "m"(silly->fpr[15]));
+       asm("fld f16,%0" : : "m"(silly->fpr[16]));
+       asm("fld f17,%0" : : "m"(silly->fpr[17]));
+       asm("fld f18,%0" : : "m"(silly->fpr[18]));
+       asm("fld f19,%0" : : "m"(silly->fpr[19]));
+       asm("fld f20,%0" : : "m"(silly->fpr[20]));
+       asm("fld f21,%0" : : "m"(silly->fpr[21]));
+       asm("fld f22,%0" : : "m"(silly->fpr[22]));
+       asm("fld f23,%0" : : "m"(silly->fpr[23]));
+       asm("fld f24,%0" : : "m"(silly->fpr[24]));
+       asm("fld f25,%0" : : "m"(silly->fpr[25]));
+       asm("fld f26,%0" : : "m"(silly->fpr[26]));
+       asm("fld f27,%0" : : "m"(silly->fpr[27]));
+       asm("fld f28,%0" : : "m"(silly->fpr[28]));
+       asm("fld f29,%0" : : "m"(silly->fpr[29]));
+       asm("fld f30,%0" : : "m"(silly->fpr[30]));
+       asm("fld f31,%0" : : "m"(silly->fpr[31]));
 
        mtpcr(PCR_SR, sr);
 }
 
        mtpcr(PCR_SR, sr);
 }
index 7f1ef92..7b471fa 100644 (file)
@@ -1,7 +1,7 @@
 /* Simple linker script for the ROS kernel.
    See the GNU ld 'info' manual ("info ld") to learn the syntax. */
 
 /* Simple linker script for the ROS kernel.
    See the GNU ld 'info' manual ("info ld") to learn the syntax. */
 
-OUTPUT_ARCH("mips:riscv")
+OUTPUT_ARCH("riscv")
 ENTRY(_start)
 
 SECTIONS
 ENTRY(_start)
 
 SECTIONS
index e2d49b8..99be591 100644 (file)
 #define NUM_CAUSES 13
 
 #define ASM_CR(r)   _ASM_CR(r)
 #define NUM_CAUSES 13
 
 #define ASM_CR(r)   _ASM_CR(r)
-#define _ASM_CR(r)  $cr##r
+#define _ASM_CR(r)  cr##r
 
 #ifndef __ASSEMBLER__
 
 #define mtpcr(reg,val) ({ long __tmp = (long)(val); \
 
 #ifndef __ASSEMBLER__
 
 #define mtpcr(reg,val) ({ long __tmp = (long)(val); \
-          asm volatile ("mtpcr %0,$cr%1"::"r"(__tmp),"i"(reg)); })
+          asm volatile ("mtpcr %0,cr%1"::"r"(__tmp),"i"(reg)); })
 
 #define mfpcr(reg) ({ long __tmp; \
 
 #define mfpcr(reg) ({ long __tmp; \
-          asm volatile ("mfpcr %0,$cr%1" : "=r"(__tmp) : "i"(reg)); \
+          asm volatile ("mfpcr %0,cr%1" : "=r"(__tmp) : "i"(reg)); \
           __tmp; })
 
 #define irq_disable() asm volatile("di")
           __tmp; })
 
 #define irq_disable() asm volatile("di")
index 506fffc..5ea8afc 100644 (file)
@@ -83,9 +83,8 @@ void set_stack_top(uintptr_t stacktop)
 /* Note the assertion assumes we are in the top page of the stack. */
 uintptr_t get_stack_top(void)
 {
 /* Note the assertion assumes we are in the top page of the stack. */
 uintptr_t get_stack_top(void)
 {
-       uintptr_t sp, stacktop;
-       stacktop = core_stacktops[core_id()];
-       asm volatile("move %0,$sp" : "=r"(sp));
+       register uintptr_t sp asm ("sp");
+       uintptr_t stacktop = core_stacktops[core_id()];
        assert(ROUNDUP(sp, PGSIZE) == stacktop);
        return stacktop;
 }
        assert(ROUNDUP(sp, PGSIZE) == stacktop);
        return stacktop;
 }
index 4dca119..c6e0326 100644 (file)
@@ -20,7 +20,7 @@ static inline bool in_kernel(struct trapframe *tf)
 static inline void __attribute__((always_inline))
 set_stack_pointer(uintptr_t sp)
 {
 static inline void __attribute__((always_inline))
 set_stack_pointer(uintptr_t sp)
 {
-       asm volatile("move $sp,%0" : : "r"(sp) : "memory");
+       asm volatile("move sp, %0" : : "r"(sp) : "memory");
 }
 
 /* Save's the current kernel context into tf, setting the PC to the end of this
 }
 
 /* Save's the current kernel context into tf, setting the PC to the end of this