@@ -443,11 +443,18 @@ pub const csr = struct {
443
443
reserved0 : u11 ,
444
444
window : u16 ,
445
445
});
446
- pub const meipra = CSR (0xbe2 , packed struct {
446
+ pub const meipra = CSR (0xbe3 , packed struct {
447
447
index : u5 ,
448
448
reserved0 : u11 ,
449
449
window : u16 ,
450
450
});
451
+ pub const meinext = CSR (0xbe4 , packed struct {
452
+ update : u1 ,
453
+ reserved0 : u1 ,
454
+ irq : u9 ,
455
+ reserved1 : u20 ,
456
+ noirq : u1 ,
457
+ });
451
458
};
452
459
453
460
// TODO: maybe this should be relocated somewhere else
@@ -461,11 +468,9 @@ pub const csr = struct {
461
468
const Self = @This ();
462
469
463
470
pub inline fn read_raw () u32 {
464
- var value : u32 = undefined ;
465
- asm volatile ("csrr %[value], " ++ ident
466
- : [value ] "+r" (value ),
471
+ return asm volatile ("csrr %[value], " ++ ident
472
+ : [value ] "=r" (- > u32 ),
467
473
);
468
- return value ;
469
474
}
470
475
471
476
pub inline fn read () T {
@@ -521,7 +526,7 @@ pub const csr = struct {
521
526
522
527
pub inline fn read_set_raw (bits : u32 ) u32 {
523
528
return asm volatile ("csrrs %[value], " ++ ident ++ ", %[bits]"
524
- : [value ] "r" (- > u32 ),
529
+ : [value ] "= r" (- > u32 ),
525
530
: [bits ] "r" (bits ),
526
531
);
527
532
}
@@ -532,7 +537,7 @@ pub const csr = struct {
532
537
533
538
pub inline fn read_clear_raw (bits : u32 ) u32 {
534
539
return asm volatile ("csrrc %[value], " ++ ident ++ ", %[bits]"
535
- : [value ] "r" (- > u32 ),
540
+ : [value ] "= r" (- > u32 ),
536
541
: [bits ] "r" (bits ),
537
542
);
538
543
}
0 commit comments