@@ -2444,91 +2444,99 @@ template bank is (object, shown_desc) {
2444
2444
}
2445
2445
}
2446
2446
2447
- implement register_view {
2448
- method description() -> (const char *) {
2449
- // TODO: it would make sense to return NULL for no desc, but
2450
- // iface docs doesn't explicitly specify whether this is
2451
- // allowed.
2452
- return bank.shown_desc == NULL ? "" : bank.shown_desc;
2453
- }
2454
- method big_endian_bitorder() -> (bool) {
2455
- return bank.be_bitorder;
2456
- }
2457
- method number_of_registers() -> (uint32) {
2458
- return _num_registers();
2459
- }
2460
- method register_info(uint32 reg) -> (attr_value_t) {
2461
- local register r;
2462
- try {
2463
- r = bank._get_register(reg);
2464
- } catch {
2465
- return SIM_make_attr_nil();
2447
+ // Warning: This parameter is meant for enabling some experiments with
2448
+ // custom register_view implementations. It should not be used in
2449
+ // production code.
2450
+ param _provide_register_view default true;
2451
+ #if (_provide_register_view) {
2452
+ implement register_view {
2453
+ method description() -> (const char *) {
2454
+ // TODO: it would make sense to return NULL for no desc, but
2455
+ // iface docs doesn't explicitly specify whether this is
2456
+ // allowed.
2457
+ return bank.shown_desc == NULL ? "" : bank.shown_desc;
2466
2458
}
2459
+ method big_endian_bitorder() -> (bool) {
2460
+ return bank.be_bitorder;
2461
+ }
2462
+ method number_of_registers() -> (uint32) {
2463
+ return _num_registers();
2464
+ }
2465
+ method register_info(uint32 reg) -> (attr_value_t) {
2466
+ local register r;
2467
+ try {
2468
+ r = bank._get_register(reg);
2469
+ } catch {
2470
+ return SIM_make_attr_nil();
2471
+ }
2467
2472
2468
- local attr_value_t fields = SIM_alloc_attr_list(
2469
- r._num_fields());
2473
+ local attr_value_t fields = SIM_alloc_attr_list(
2474
+ r._num_fields());
2475
+
2476
+ local uint32 idx = 0;
2477
+ foreach f in (r.fields) {
2478
+ local attr_value_t elem = SIM_make_attr_list(
2479
+ 4,
2480
+ SIM_make_attr_string(
2481
+ f._qname() + strlen(r._qname()) + 1),
2482
+ // TODO: NULL should give a nil value
2483
+ SIM_make_attr_string(f.shown_desc == NULL ? ""
2484
+ : f.shown_desc),
2485
+ SIM_make_attr_uint64(f.lsb),
2486
+ SIM_make_attr_uint64(f.lsb + f.bitsize - 1));
2487
+ SIM_attr_list_set_item(&fields, idx, elem);
2488
+ idx++;
2489
+ }
2470
2490
2471
- local uint32 idx = 0 ;
2472
- foreach f in (r.fields) {
2473
- local attr_value_t elem = SIM_make_attr_list(
2474
- 4,
2475
- SIM_make_attr_string(f ._qname() + strlen(r ._qname()) + 1),
2491
+ local attr_value_t ret ;
2492
+ ret = SIM_make_attr_list(
2493
+ 6,
2494
+ SIM_make_attr_string(
2495
+ r ._qname() + strlen(bank ._qname()) + 1),
2476
2496
// TODO: NULL should give a nil value
2477
- SIM_make_attr_string(f.shown_desc == NULL ? ""
2478
- : f.shown_desc),
2479
- SIM_make_attr_uint64(f.lsb),
2480
- SIM_make_attr_uint64(f.lsb + f.bitsize - 1));
2481
- SIM_attr_list_set_item(&fields, idx, elem);
2482
- idx++;
2497
+ SIM_make_attr_string(r.shown_desc == NULL ? ""
2498
+ : r.shown_desc),
2499
+ SIM_make_attr_uint64(r._size()),
2500
+ SIM_make_attr_uint64(r.offset),
2501
+ fields,
2502
+ SIM_make_attr_boolean(
2503
+ byte_order == "big-endian" #? true #: false));
2504
+
2505
+ return ret;
2483
2506
}
2507
+ method get_register_value(uint32 reg) -> (uint64) {
2508
+ local register r;
2509
+ try {
2510
+ r = bank._get_register(reg);
2511
+ } catch {
2512
+ return 0;
2513
+ }
2484
2514
2485
- local attr_value_t ret;
2486
- ret = SIM_make_attr_list(
2487
- 6,
2488
- SIM_make_attr_string(r._qname() + strlen(bank._qname()) + 1),
2489
- // TODO: NULL should give a nil value
2490
- SIM_make_attr_string(r.shown_desc == NULL ? ""
2491
- : r.shown_desc),
2492
- SIM_make_attr_uint64(r._size()),
2493
- SIM_make_attr_uint64(r.offset),
2494
- fields,
2495
- SIM_make_attr_boolean(
2496
- byte_order == "big-endian" #? true #: false));
2497
-
2498
- return ret;
2499
- }
2500
- method get_register_value(uint32 reg) -> (uint64) {
2501
- local register r;
2502
- try {
2503
- r = bank._get_register(reg);
2504
- } catch {
2505
- return 0;
2515
+ return r.get();
2506
2516
}
2517
+ method set_register_value(uint32 reg, uint64 val) {
2518
+ local register r;
2519
+ try {
2520
+ r = bank._get_register(reg);
2521
+ } catch {
2522
+ return;
2523
+ }
2507
2524
2508
- return r.get();
2509
- }
2510
- method set_register_value(uint32 reg, uint64 val) {
2511
- local register r;
2512
- try {
2513
- r = bank._get_register(reg);
2514
- } catch {
2515
- return;
2525
+ r.set(val);
2516
2526
}
2517
-
2518
- r.set(val);
2519
2527
}
2520
- }
2521
2528
2522
- implement register_view_read_only {
2523
- method is_read_only(uint32 reg) -> (bool) {
2524
- local register r;
2525
- try {
2526
- r = bank._get_register(reg);
2527
- } catch {
2528
- return false;
2529
- }
2529
+ implement register_view_read_only {
2530
+ method is_read_only(uint32 reg) -> (bool) {
2531
+ local register r;
2532
+ try {
2533
+ r = bank._get_register(reg);
2534
+ } catch {
2535
+ return false;
2536
+ }
2530
2537
2531
- return r._is_read_only;
2538
+ return r._is_read_only;
2539
+ }
2532
2540
}
2533
2541
}
2534
2542
0 commit comments