@@ -282,22 +282,22 @@ fields:
282282 * Any additional traps in VS-mode (controlled via `hstatus.VTVM` instead).
283283
284284 type() : |
285- if ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].S == 1'b0) )) {
285+ if ((!MISA_CSR_IMPLEMENTED && !implemented?(ExtensionName::S)) || (CSR[misa].S == 1'b0)) {
286286 return CsrFieldType::RO;
287287 } else {
288288 return CsrFieldType::RW;
289289 }
290290 definedBy : S
291291 reset_value() : |
292- if ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].S == 1'b0) )) {
292+ if ((!MISA_CSR_IMPLEMENTED && !implemented?(ExtensionName::S)) || (CSR[misa].S == 1'b0)) {
293293 return 0;
294294 } else if (MSTATUS_TVM_IMPLEMENTED) {
295295 return UNDEFINED_LEGAL;
296296 } else {
297297 return 0;
298298 }
299299 sw_write(csr_value) : |
300- if ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].S == 1'b0) )) {
300+ if ((!MISA_CSR_IMPLEMENTED && !implemented?(ExtensionName::S)) || (CSR[misa].S == 1'b0)) {
301301 return 0;
302302 } else if (MSTATUS_TVM_IMPLEMENTED) {
303303 return csr_value.TVM;
@@ -347,7 +347,7 @@ fields:
347347 `mstatus.MPRV` is cleared on any exception return (`mret` or `sret` instruction, regardless of the trap handler privilege mode).
348348 definedBy : U
349349 type() : |
350- return ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].U == 1'b1) )) ? CsrFieldType::RWH : CsrFieldType::RO;
350+ return ((!MISA_CSR_IMPLEMENTED && implemented?(ExtensionName::U)) || (CSR[misa].U == 1'b1)) ? CsrFieldType::RWH : CsrFieldType::RO;
351351 reset_value : 0
352352 XS :
353353 location : 16-15
@@ -370,9 +370,10 @@ fields:
370370 Values 1 and 2 are valid write values for software, but are not interpreted by hardware
371371 other than to possibly enable a previously-disabled floating point unit.
372372 type() : |
373- if ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].F == 1'b1))) {
373+ if ((!MISA_CSR_IMPLEMENTED && implemented?(ExtensionName::F)) || (CSR[misa].F == 1'b1)) {
374374 return CsrFieldType::RWH;
375- } else if (((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].S == 1'b0))) && ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].F == 1'b0)))) {
375+ } else if (((!MISA_CSR_IMPLEMENTED && !implemented?(ExtensionName::S)) || (CSR[misa].S == 1'b0)) &&
376+ ((!MISA_CSR_IMPLEMENTED && !implemented?(ExtensionName::F)) || (CSR[misa].F == 1'b0))) {
376377 # must be read-only-0
377378 return CsrFieldType::RO;
378379 } else {
@@ -382,19 +383,21 @@ fields:
382383 definedBy :
383384 anyOf : [F, S]
384385 reset_value() : |
385- if ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].F == 1'b1))) {
386+ if ((!MISA_CSR_IMPLEMENTED && implemented?(ExtensionName::F)) || (CSR[misa].F == 1'b1)) {
386387 return UNDEFINED_LEGAL;
387- } else if (((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].S == 1'b0))) && ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].F == 1'b0)))) {
388+ } else if (((!MISA_CSR_IMPLEMENTED && !implemented?(ExtensionName::S)) || (CSR[misa].S == 1'b0)) &&
389+ ((!MISA_CSR_IMPLEMENTED && !implemented?(ExtensionName::F)) || (CSR[misa].F == 1'b0))) {
388390 # must be read-only-0
389391 return 0;
390392 } else {
391393 # there will be no hardware update in this case because we know the F extension isn't implemented
392394 return MSTATUS_FS_WRITABLE ? UNDEFINED_LEGAL : 0;
393395 }
394396 sw_write(csr_value) : |
395- if ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].F == 1'b1))) {
397+ if ((!MISA_CSR_IMPLEMENTED && implemented?(ExtensionName::F)) || (CSR[misa].F == 1'b1)) {
396398 return ary_includes?<$array_size(MSTATUS_FS_LEGAL_VALUES), 2>(MSTATUS_FS_LEGAL_VALUES, csr_value.FS) ? csr_value.FS : UNDEFINED_LEGAL_DETERMINISTIC;
397- } else if (((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].S == 1'b0))) && ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].F == 1'b0)))) {
399+ } else if (((!MISA_CSR_IMPLEMENTED && !implemented?(ExtensionName::S)) || (CSR[misa].S == 1'b0)) &&
400+ ((!MISA_CSR_IMPLEMENTED && !implemented?(ExtensionName::F)) || (CSR[misa].F == 1'b0))) {
398401 # must be read-only-0
399402 return 0;
400403 } else {
@@ -454,29 +457,32 @@ fields:
454457 definedBy :
455458 anyOf : [V, S]
456459 type() : |
457- if ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].V == 1'b1))) {
460+ if ((!MISA_CSR_IMPLEMENTED && implemented?(ExtensionName::V)) || (CSR[misa].V == 1'b1)) {
458461 return CsrFieldType::RWH;
459- } else if (((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].S == 1'b0))) && ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].V == 1'b0)))) {
462+ } else if (((!MISA_CSR_IMPLEMENTED && !implemented?(ExtensionName::S)) || (CSR[misa].S == 1'b0)) &&
463+ ((!MISA_CSR_IMPLEMENTED && !implemented?(ExtensionName::V)) || (CSR[misa].V == 1'b0))) {
460464 # must be read-only-0
461465 return CsrFieldType::RO;
462466 } else {
463467 # there will be no hardware update in this case because we know the V extension isn't implemented
464468 return MSTATUS_VS_WRITABLE ? CsrFieldType::RW : CsrFieldType::RO;
465469 }
466470 reset_value() : |
467- if ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].V == 1'b1))) {
471+ if ((!MISA_CSR_IMPLEMENTED && implemented?(ExtensionName::V)) || (CSR[misa].V == 1'b1)) {
468472 return UNDEFINED_LEGAL;
469- } else if (((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].S == 1'b0))) && ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].V == 1'b0)))) {
473+ } else if (((!MISA_CSR_IMPLEMENTED && !implemented?(ExtensionName::S)) || (CSR[misa].S == 1'b0)) &&
474+ ((!MISA_CSR_IMPLEMENTED && !implemented?(ExtensionName::V)) || (CSR[misa].V == 1'b0))) {
470475 # must be read-only-0
471476 return 0;
472477 } else {
473478 # there will be no hardware update in this case because we know the V extension isn't implemented
474479 return MSTATUS_VS_WRITABLE ? UNDEFINED_LEGAL : 0;
475480 }
476481 sw_write(csr_value) : |
477- if ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].V == 1'b1))) {
482+ if ((!MISA_CSR_IMPLEMENTED && implemented?(ExtensionName::V)) || (CSR[misa].V == 1'b1)) {
478483 return ary_includes?<$array_size(MSTATUS_VS_LEGAL_VALUES), 2>(MSTATUS_VS_LEGAL_VALUES, csr_value.FS) ? csr_value.FS : UNDEFINED_LEGAL_DETERMINISTIC;
479- } else if (((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].S == 1'b0))) && ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].V == 1'b0)))) {
484+ } else if (((!MISA_CSR_IMPLEMENTED && !implemented?(ExtensionName::S)) || (CSR[misa].S == 1'b0)) &&
485+ ((!MISA_CSR_IMPLEMENTED && !implemented?(ExtensionName::V)) || (CSR[misa].V == 1'b0))) {
480486 # must be read-only-0
481487 return 0;
482488 } else {
@@ -569,10 +575,10 @@ fields:
569575
570576 Other than serving as a record of nested traps as described above, `mstatus.SPIE` does not affect execution.
571577 type() : |
572- return ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].S == 1'b1) )) ? CsrFieldType::RWH : CsrFieldType::RO;
578+ return ((!MISA_CSR_IMPLEMENTED && implemented?(ExtensionName::S)) || (CSR[misa].S == 1'b1)) ? CsrFieldType::RWH : CsrFieldType::RO;
573579 definedBy : S
574580 reset_value() : |
575- return ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].S == 1'b1) )) ? UNDEFINED_LEGAL : 0;
581+ return ((!MISA_CSR_IMPLEMENTED && implemented?(ExtensionName::S)) || (CSR[misa].S == 1'b1)) ? UNDEFINED_LEGAL : 0;
576582 MIE :
577583 location : 3
578584 description : |
@@ -606,7 +612,7 @@ fields:
606612 * When 1, (H)S-mode interrupts that are not otherwise disabled with a field in `sie` are enabled.
607613
608614 type() : |
609- return ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].S == 1'b1) )) ? CsrFieldType::RWH : CsrFieldType::RO;
615+ return ((!MISA_CSR_IMPLEMENTED && implemented?(ExtensionName::S)) || (CSR[misa].S == 1'b1)) ? CsrFieldType::RWH : CsrFieldType::RO;
610616 definedBy : S
611617 reset_value() : |
612- return ((!MISA_CSR_IMPLEMENTED) || ((!MISA_CSR_IMPLEMENTED) || (CSR[misa].S == 1'b1) )) ? UNDEFINED_LEGAL : 0;
618+ return ((!MISA_CSR_IMPLEMENTED && implemented?(ExtensionName::S)) || (CSR[misa].S == 1'b1)) ? UNDEFINED_LEGAL : 0;
0 commit comments