diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig
index 1f1baa5dde..b90b91dc25 100644
--- a/hw/misc/Kconfig
+++ b/hw/misc/Kconfig
@@ -25,6 +25,10 @@ config PCI_TESTDEV
     default y if TEST_DEVICES
     depends on PCI
 
+config MEMACCESS_TESTDEV
+    bool
+    default y if TEST_DEVICES
+
 config EDU
     bool
     default y if TEST_DEVICES
diff --git a/hw/misc/memaccess-testdev.c b/hw/misc/memaccess-testdev.c
new file mode 100644
index 0000000000..8282bd3035
--- /dev/null
+++ b/hw/misc/memaccess-testdev.c
@@ -0,0 +1,197 @@
+/*
+ * QEMU memory access test device
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * Copyright (c) 2024 IGEL Co., Ltd.
+ * Author: Tomoyuki HIROSE <tomoyuki.hirose@igel.co.jp>
+ */
+/*
+ * This device is used to test memory acccess, like:
+ *
+ *     qemu-system-x86_64 -device memaccess-testdev,address=0x10000000
+ */
+
+#include "qemu/osdep.h"
+#include "exec/address-spaces.h"
+#include "exec/memory.h"
+#include "hw/qdev-core.h"
+#include "hw/qdev-properties.h"
+#include "qapi/error.h"
+#include "qemu/typedefs.h"
+#include "qom/object.h"
+
+#include "hw/misc/memaccess-testdev.h"
+
+typedef struct MrOpsList {
+    const char *name;
+    const MemoryRegionOps *ops_array;
+    const size_t ops_array_len;
+    const size_t offset_idx;
+} MrOpsList;
+
+static void testdev_init_memory_region(MemoryRegion *mr,
+                                       Object *owner,
+                                       const MemoryRegionOps *ops,
+                                       void *opaque,
+                                       const char *name,
+                                       uint64_t size,
+                                       MemoryRegion *container,
+                                       hwaddr container_offset)
+{
+    memory_region_init_io(mr, owner, ops, opaque, name, size);
+    memory_region_add_subregion(container, container_offset, mr);
+}
+
+static void testdev_init_from_mr_ops_list(MemAccessTestDev *testdev,
+                                          const MrOpsList *l)
+{
+    for (size_t i = 0; i < l->ops_array_len; i++) {
+        g_autofree gchar *name = g_strdup_printf("%s-%ld", l->name, i);
+        testdev_init_memory_region(&testdev->memory_regions[l->offset_idx + i],
+                                   OBJECT(testdev), &l->ops_array[i],
+                                   testdev->mr_data[l->offset_idx + i],
+                                   name,
+                                   MEMACCESS_TESTDEV_REGION_SIZE,
+                                   &testdev->container,
+                                   MEMACCESS_TESTDEV_REGION_SIZE *
+                                   (l->offset_idx + i));
+    }
+}
+
+#define _DEFINE_MR_OPS_LIST(_n, _a, _l, _o)                            \
+    {                                                                  \
+        .name = (_n),                                                  \
+            .ops_array = (_a),                                         \
+            .ops_array_len = (_l),                                     \
+            .offset_idx = (_o),                                        \
+    }
+
+static const MrOpsList mr_ops_list[] = {
+    _DEFINE_MR_OPS_LIST("little-b-valid",
+                        ops_list_little_b_valid,
+                        N_OPS_LIST_LITTLE_B_VALID,
+                        OFF_IDX_OPS_LIST_LITTLE_B_VALID),
+    _DEFINE_MR_OPS_LIST("little-b-invalid",
+                        ops_list_little_b_invalid,
+                        N_OPS_LIST_LITTLE_B_INVALID,
+                        OFF_IDX_OPS_LIST_LITTLE_B_INVALID),
+    _DEFINE_MR_OPS_LIST("little-w-valid",
+                        ops_list_little_w_valid,
+                        N_OPS_LIST_LITTLE_W_VALID,
+                        OFF_IDX_OPS_LIST_LITTLE_W_VALID),
+    _DEFINE_MR_OPS_LIST("little-w-invalid",
+                        ops_list_little_w_invalid,
+                        N_OPS_LIST_LITTLE_W_INVALID,
+                        OFF_IDX_OPS_LIST_LITTLE_W_INVALID),
+    _DEFINE_MR_OPS_LIST("little-l-valid",
+                        ops_list_little_l_valid,
+                        N_OPS_LIST_LITTLE_L_VALID,
+                        OFF_IDX_OPS_LIST_LITTLE_L_VALID),
+    _DEFINE_MR_OPS_LIST("little-l-invalid",
+                        ops_list_little_l_invalid,
+                        N_OPS_LIST_LITTLE_L_INVALID,
+                        OFF_IDX_OPS_LIST_LITTLE_L_INVALID),
+    _DEFINE_MR_OPS_LIST("little-q-valid",
+                        ops_list_little_q_valid,
+                        N_OPS_LIST_LITTLE_Q_VALID,
+                        OFF_IDX_OPS_LIST_LITTLE_Q_VALID),
+    _DEFINE_MR_OPS_LIST("little-q-invalid",
+                        ops_list_little_q_invalid,
+                        N_OPS_LIST_LITTLE_Q_INVALID,
+                        OFF_IDX_OPS_LIST_LITTLE_Q_INVALID),
+    _DEFINE_MR_OPS_LIST("big-b-valid",
+                        ops_list_big_b_valid,
+                        N_OPS_LIST_BIG_B_VALID,
+                        OFF_IDX_OPS_LIST_BIG_B_VALID),
+    _DEFINE_MR_OPS_LIST("big-b-invalid",
+                        ops_list_big_b_invalid,
+                        N_OPS_LIST_BIG_B_INVALID,
+                        OFF_IDX_OPS_LIST_BIG_B_INVALID),
+    _DEFINE_MR_OPS_LIST("big-w-valid",
+                        ops_list_big_w_valid,
+                        N_OPS_LIST_BIG_W_VALID,
+                        OFF_IDX_OPS_LIST_BIG_W_VALID),
+    _DEFINE_MR_OPS_LIST("big-w-invalid",
+                        ops_list_big_w_invalid,
+                        N_OPS_LIST_BIG_W_INVALID,
+                        OFF_IDX_OPS_LIST_BIG_W_INVALID),
+    _DEFINE_MR_OPS_LIST("big-l-valid",
+                        ops_list_big_l_valid,
+                        N_OPS_LIST_LITTLE_L_VALID,
+                        OFF_IDX_OPS_LIST_BIG_L_VALID),
+    _DEFINE_MR_OPS_LIST("big-l-invalid",
+                        ops_list_big_l_invalid,
+                        N_OPS_LIST_BIG_L_INVALID,
+                        OFF_IDX_OPS_LIST_BIG_L_INVALID),
+    _DEFINE_MR_OPS_LIST("big-q-valid",
+                        ops_list_big_q_valid,
+                        N_OPS_LIST_BIG_Q_VALID,
+                        OFF_IDX_OPS_LIST_BIG_Q_VALID),
+    _DEFINE_MR_OPS_LIST("big-q-invalid",
+                        ops_list_big_q_invalid,
+                        N_OPS_LIST_BIG_Q_INVALID,
+                        OFF_IDX_OPS_LIST_BIG_Q_INVALID),
+};
+#define N_MR_OPS_LIST (sizeof(mr_ops_list) / sizeof(MrOpsList))
+
+static void init_testdev(MemAccessTestDev *testdev)
+{
+    memory_region_init(&testdev->container, OBJECT(testdev), "memtest-regions",
+                       MEMACCESS_TESTDEV_REGION_SIZE * N_OPS_LIST);
+    testdev->mr_data = g_malloc(MEMACCESS_TESTDEV_MR_DATA_SIZE);
+
+    for (size_t i = 0; i < N_MR_OPS_LIST; i++) {
+        testdev_init_from_mr_ops_list(testdev, &mr_ops_list[i]);
+    }
+
+    memory_region_add_subregion(get_system_memory(), testdev->base,
+                                &testdev->container);
+}
+
+static void memaccess_testdev_realize(DeviceState *dev, Error **errp)
+{
+    MemAccessTestDev *d = MEM_ACCESS_TEST_DEV(dev);
+
+    if (d->base == UINT64_MAX) {
+        error_setg(errp, "base address is not assigned");
+        return;
+    }
+
+    init_testdev(d);
+}
+
+static void memaccess_testdev_unrealize(DeviceState *dev)
+{
+    MemAccessTestDev *d = MEM_ACCESS_TEST_DEV(dev);
+    g_free(d->mr_data);
+}
+
+static Property memaccess_testdev_props[] = {
+    DEFINE_PROP_UINT64("address", MemAccessTestDev, base, UINT64_MAX),
+    DEFINE_PROP_END_OF_LIST(),
+};
+
+static void memaccess_testdev_class_init(ObjectClass *klass, void *data)
+{
+    DeviceClass *dc = DEVICE_CLASS(klass);
+
+    dc->realize = memaccess_testdev_realize;
+    dc->unrealize = memaccess_testdev_unrealize;
+    device_class_set_props(dc, memaccess_testdev_props);
+    set_bit(DEVICE_CATEGORY_MISC, dc->categories);
+}
+
+static const TypeInfo memaccess_testdev_info = {
+    .name = TYPE_MEM_ACCESS_TEST_DEV,
+    .parent = TYPE_DEVICE,
+    .instance_size = sizeof(MemAccessTestDev),
+    .class_init = memaccess_testdev_class_init,
+};
+
+static void memaccess_testdev_register_types(void)
+{
+    type_register_static(&memaccess_testdev_info);
+}
+
+type_init(memaccess_testdev_register_types)
diff --git a/hw/misc/meson.build b/hw/misc/meson.build
index d02d96e403..28054c5337 100644
--- a/hw/misc/meson.build
+++ b/hw/misc/meson.build
@@ -4,6 +4,7 @@ system_ss.add(when: 'CONFIG_FW_CFG_DMA', if_true: files('vmcoreinfo.c'))
 system_ss.add(when: 'CONFIG_ISA_DEBUG', if_true: files('debugexit.c'))
 system_ss.add(when: 'CONFIG_ISA_TESTDEV', if_true: files('pc-testdev.c'))
 system_ss.add(when: 'CONFIG_PCI_TESTDEV', if_true: files('pci-testdev.c'))
+system_ss.add(when: 'CONFIG_MEMACCESS_TESTDEV', if_true: files('memaccess-testdev.c'))
 system_ss.add(when: 'CONFIG_UNIMP', if_true: files('unimp.c'))
 system_ss.add(when: 'CONFIG_EMPTY_SLOT', if_true: files('empty_slot.c'))
 system_ss.add(when: 'CONFIG_LED', if_true: files('led.c'))
diff --git a/include/hw/misc/memaccess-testdev.h b/include/hw/misc/memaccess-testdev.h
new file mode 100644
index 0000000000..1909e40931
--- /dev/null
+++ b/include/hw/misc/memaccess-testdev.h
@@ -0,0 +1,42 @@
+/*
+ * QEMU memory access test device header
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * Copyright (c) 2024 IGEL Co., Ltd.
+ * Author: Tomoyuki HIROSE <tomoyuki.hirose@igel.co.jp>
+ */
+
+#ifndef HW_MISC_MEMACCESS_TESTDEV_H
+#define HW_MISC_MEMACCESS_TESTDEV_H
+
+#include "qemu/osdep.h"
+#include "exec/memory.h"
+#include "hw/qdev-core.h"
+
+#define TYPE_MEM_ACCESS_TEST_DEV "memaccess-testdev"
+
+#include "hw/misc/memaccess-testdev.h.inc"
+
+typedef uint8_t MrData[MEMACCESS_TESTDEV_REGION_SIZE];
+#define MEMACCESS_TESTDEV_MR_DATA_SIZE (sizeof(MrData) * N_OPS_LIST)
+
+typedef DeviceClass MemAccessTestDevClass;
+typedef struct MemAccessTestDev {
+    /* Private */
+    DeviceState parent_obj;
+    /* Public */
+    MemoryRegion container;
+    MemoryRegion memory_regions[N_OPS_LIST]; /* test memory regions */
+    uint64_t base;                           /* map base address */
+    MrData *mr_data;                         /* memory region data array */
+} MemAccessTestDev;
+
+#define MEM_ACCESS_TEST_DEV_GET_CLASS(obj)                              \
+    OBJECT_GET_CLASS(MemAccessTestDevClass, obj, TYPE_MEM_ACCESS_TEST_DEV)
+#define MEM_ACCESS_TEST_DEV_CLASS(klass)                                \
+    OBJECT_CLASS_CHECK(MemAccessTestDevClass, klass, TYPE_MEM_ACCESS_TEST_DEV)
+#define MEM_ACCESS_TEST_DEV(obj)                                    \
+    OBJECT_CHECK(MemAccessTestDev, obj, TYPE_MEM_ACCESS_TEST_DEV)
+
+#endif
diff --git a/include/hw/misc/memaccess-testdev.h.inc b/include/hw/misc/memaccess-testdev.h.inc
new file mode 100644
index 0000000000..d6105a7263
--- /dev/null
+++ b/include/hw/misc/memaccess-testdev.h.inc
@@ -0,0 +1,1864 @@
+/*
+ * QEMU memory access test device functions
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * Copyright (c) 2024 IGEL Co., Ltd.
+ * Author: Tomoyuki HIROSE <tomoyuki.hirose@igel.co.jp>
+ */
+
+#ifndef HW_MISC_MEMACCESS_TESTDEV_H_INC
+#define HW_MISC_MEMACCESS_TESTDEV_H_INC
+
+#include "qemu/osdep.h"
+#include "exec/memory.h"
+
+#define MEMACCESS_TESTDEV_REGION_SIZE (32)
+
+static uint64_t memaccess_testdev_read_little(void *opaque, hwaddr addr,
+                                              unsigned int size)
+{
+    g_assert(addr + size < MEMACCESS_TESTDEV_REGION_SIZE);
+    void *s = (uint8_t *)opaque + addr;
+    return ldn_le_p(s, size);
+}
+
+static void memaccess_testdev_write_little(void *opaque, hwaddr addr,
+                                           uint64_t data, unsigned int size)
+{
+    g_assert(addr + size < MEMACCESS_TESTDEV_REGION_SIZE);
+    void *d = (uint8_t *)opaque + addr;
+    stn_le_p(d, size, data);
+}
+
+static uint64_t memaccess_testdev_read_big(void *opaque, hwaddr addr,
+                                           unsigned int size)
+{
+    g_assert(addr + size < MEMACCESS_TESTDEV_REGION_SIZE);
+    void *s = (uint8_t *)opaque + addr;
+    return ldn_be_p(s, size);
+}
+
+static void memaccess_testdev_write_big(void *opaque, hwaddr addr,
+                                        uint64_t data, unsigned int size)
+{
+    g_assert(addr + size < MEMACCESS_TESTDEV_REGION_SIZE);
+    void *d = (uint8_t *)opaque + addr;
+    stn_be_p(d, size, data);
+}
+
+#define __JOIN6(a, b, c, d, e, f) __JOIN6_AGAIN(a, b, c, d, e, f)
+#define __JOIN6_AGAIN(a, b, c, d, e, f) a##b##c##d##e##f
+#define __JOIN2(a, b) __JOIN2_AGAIN(a, b)
+#define __JOIN2_AGAIN(a, b) a##b
+#define __STR(x) __STR_AGAIN(x)
+#define __STR_AGAIN(x) #x
+
+#define NAME_OPS_LITTLE(valid_max, valid_min, valid_unaligned,          \
+                        impl_max, impl_min, impl_unaligned)             \
+    __JOIN2(ops_little,                                                 \
+            __JOIN6(valid_max, valid_min, valid_unaligned,              \
+                    impl_max, impl_min, impl_unaligned))
+
+#define NAME_OPS_BIG(valid_max, valid_min, valid_unaligned,             \
+                     impl_max, impl_min, impl_unaligned)                \
+    __JOIN2(ops_big,                                                    \
+            __JOIN6(valid_max, valid_min, valid_unaligned,              \
+                    impl_max, impl_min, impl_unaligned))
+
+#define GEN_OPS_LITTLE(valid_max,                                       \
+                       valid_min,                                       \
+                       valid_unaligned,                                 \
+                       impl_max,                                        \
+                       impl_min,                                        \
+                       impl_unaligned)                                  \
+    static const MemoryRegionOps                                        \
+    NAME_OPS_LITTLE(valid_max, valid_min, valid_unaligned,              \
+                    impl_max, impl_min, impl_unaligned)                 \
+    = {                                                                 \
+        .read = memaccess_testdev_read_little,                          \
+        .write = memaccess_testdev_write_little,                        \
+        .endianness = DEVICE_LITTLE_ENDIAN,                             \
+        .valid = {                                                      \
+            .max_access_size = valid_max,                               \
+            .min_access_size = valid_min,                               \
+            .unaligned = valid_unaligned,                               \
+        },                                                              \
+        .impl = {                                                       \
+            .max_access_size = impl_max,                                \
+            .min_access_size = impl_min,                                \
+            .unaligned = impl_unaligned,                                \
+        },                                                              \
+    };
+
+#define GEN_OPS_BIG(valid_max,                                          \
+                    valid_min,                                          \
+                    valid_unaligned,                                    \
+                    impl_max,                                           \
+                    impl_min,                                           \
+                    impl_unaligned)                                     \
+    static const MemoryRegionOps                                        \
+    NAME_OPS_BIG(valid_max, valid_min, valid_unaligned,                 \
+                 impl_max, impl_min, impl_unaligned)                    \
+    = {                                                                 \
+        .read = memaccess_testdev_read_big,                             \
+        .write = memaccess_testdev_write_big,                           \
+        .endianness = DEVICE_BIG_ENDIAN,                                \
+        .valid = {                                                      \
+            .max_access_size = valid_max,                               \
+            .min_access_size = valid_min,                               \
+            .unaligned = valid_unaligned,                               \
+        },                                                              \
+        .impl = {                                                       \
+            .max_access_size = impl_max,                                \
+            .min_access_size = impl_min,                                \
+            .unaligned = impl_unaligned,                                \
+        },                                                              \
+    };
+
+GEN_OPS_LITTLE(1, 1,  true, 1, 1,  true)
+GEN_OPS_LITTLE(1, 1,  true, 2, 1,  true)
+GEN_OPS_LITTLE(1, 1,  true, 4, 1,  true)
+GEN_OPS_LITTLE(1, 1,  true, 8, 1,  true)
+GEN_OPS_LITTLE(1, 1,  true, 2, 2,  true)
+GEN_OPS_LITTLE(1, 1,  true, 4, 2,  true)
+GEN_OPS_LITTLE(1, 1,  true, 8, 2,  true)
+GEN_OPS_LITTLE(1, 1,  true, 4, 4,  true)
+GEN_OPS_LITTLE(1, 1,  true, 8, 4,  true)
+GEN_OPS_LITTLE(1, 1,  true, 8, 8,  true)
+GEN_OPS_LITTLE(1, 1,  true, 1, 1, false)
+GEN_OPS_LITTLE(1, 1,  true, 2, 1, false)
+GEN_OPS_LITTLE(1, 1,  true, 4, 1, false)
+GEN_OPS_LITTLE(1, 1,  true, 8, 1, false)
+GEN_OPS_LITTLE(1, 1,  true, 2, 2, false)
+GEN_OPS_LITTLE(1, 1,  true, 4, 2, false)
+GEN_OPS_LITTLE(1, 1,  true, 8, 2, false)
+GEN_OPS_LITTLE(1, 1,  true, 4, 4, false)
+GEN_OPS_LITTLE(1, 1,  true, 8, 4, false)
+GEN_OPS_LITTLE(1, 1,  true, 8, 8, false)
+GEN_OPS_LITTLE(2, 1,  true, 1, 1,  true)
+GEN_OPS_LITTLE(2, 1,  true, 2, 1,  true)
+GEN_OPS_LITTLE(2, 1,  true, 4, 1,  true)
+GEN_OPS_LITTLE(2, 1,  true, 8, 1,  true)
+GEN_OPS_LITTLE(2, 1,  true, 2, 2,  true)
+GEN_OPS_LITTLE(2, 1,  true, 4, 2,  true)
+GEN_OPS_LITTLE(2, 1,  true, 8, 2,  true)
+GEN_OPS_LITTLE(2, 1,  true, 4, 4,  true)
+GEN_OPS_LITTLE(2, 1,  true, 8, 4,  true)
+GEN_OPS_LITTLE(2, 1,  true, 8, 8,  true)
+GEN_OPS_LITTLE(2, 1,  true, 1, 1, false)
+GEN_OPS_LITTLE(2, 1,  true, 2, 1, false)
+GEN_OPS_LITTLE(2, 1,  true, 4, 1, false)
+GEN_OPS_LITTLE(2, 1,  true, 8, 1, false)
+GEN_OPS_LITTLE(2, 1,  true, 2, 2, false)
+GEN_OPS_LITTLE(2, 1,  true, 4, 2, false)
+GEN_OPS_LITTLE(2, 1,  true, 8, 2, false)
+GEN_OPS_LITTLE(2, 1,  true, 4, 4, false)
+GEN_OPS_LITTLE(2, 1,  true, 8, 4, false)
+GEN_OPS_LITTLE(2, 1,  true, 8, 8, false)
+GEN_OPS_LITTLE(4, 1,  true, 1, 1,  true)
+GEN_OPS_LITTLE(4, 1,  true, 2, 1,  true)
+GEN_OPS_LITTLE(4, 1,  true, 4, 1,  true)
+GEN_OPS_LITTLE(4, 1,  true, 8, 1,  true)
+GEN_OPS_LITTLE(4, 1,  true, 2, 2,  true)
+GEN_OPS_LITTLE(4, 1,  true, 4, 2,  true)
+GEN_OPS_LITTLE(4, 1,  true, 8, 2,  true)
+GEN_OPS_LITTLE(4, 1,  true, 4, 4,  true)
+GEN_OPS_LITTLE(4, 1,  true, 8, 4,  true)
+GEN_OPS_LITTLE(4, 1,  true, 8, 8,  true)
+GEN_OPS_LITTLE(4, 1,  true, 1, 1, false)
+GEN_OPS_LITTLE(4, 1,  true, 2, 1, false)
+GEN_OPS_LITTLE(4, 1,  true, 4, 1, false)
+GEN_OPS_LITTLE(4, 1,  true, 8, 1, false)
+GEN_OPS_LITTLE(4, 1,  true, 2, 2, false)
+GEN_OPS_LITTLE(4, 1,  true, 4, 2, false)
+GEN_OPS_LITTLE(4, 1,  true, 8, 2, false)
+GEN_OPS_LITTLE(4, 1,  true, 4, 4, false)
+GEN_OPS_LITTLE(4, 1,  true, 8, 4, false)
+GEN_OPS_LITTLE(4, 1,  true, 8, 8, false)
+GEN_OPS_LITTLE(8, 1,  true, 1, 1,  true)
+GEN_OPS_LITTLE(8, 1,  true, 2, 1,  true)
+GEN_OPS_LITTLE(8, 1,  true, 4, 1,  true)
+GEN_OPS_LITTLE(8, 1,  true, 8, 1,  true)
+GEN_OPS_LITTLE(8, 1,  true, 2, 2,  true)
+GEN_OPS_LITTLE(8, 1,  true, 4, 2,  true)
+GEN_OPS_LITTLE(8, 1,  true, 8, 2,  true)
+GEN_OPS_LITTLE(8, 1,  true, 4, 4,  true)
+GEN_OPS_LITTLE(8, 1,  true, 8, 4,  true)
+GEN_OPS_LITTLE(8, 1,  true, 8, 8,  true)
+GEN_OPS_LITTLE(8, 1,  true, 1, 1, false)
+GEN_OPS_LITTLE(8, 1,  true, 2, 1, false)
+GEN_OPS_LITTLE(8, 1,  true, 4, 1, false)
+GEN_OPS_LITTLE(8, 1,  true, 8, 1, false)
+GEN_OPS_LITTLE(8, 1,  true, 2, 2, false)
+GEN_OPS_LITTLE(8, 1,  true, 4, 2, false)
+GEN_OPS_LITTLE(8, 1,  true, 8, 2, false)
+GEN_OPS_LITTLE(8, 1,  true, 4, 4, false)
+GEN_OPS_LITTLE(8, 1,  true, 8, 4, false)
+GEN_OPS_LITTLE(8, 1,  true, 8, 8, false)
+GEN_OPS_LITTLE(2, 2,  true, 1, 1,  true)
+GEN_OPS_LITTLE(2, 2,  true, 2, 1,  true)
+GEN_OPS_LITTLE(2, 2,  true, 4, 1,  true)
+GEN_OPS_LITTLE(2, 2,  true, 8, 1,  true)
+GEN_OPS_LITTLE(2, 2,  true, 2, 2,  true)
+GEN_OPS_LITTLE(2, 2,  true, 4, 2,  true)
+GEN_OPS_LITTLE(2, 2,  true, 8, 2,  true)
+GEN_OPS_LITTLE(2, 2,  true, 4, 4,  true)
+GEN_OPS_LITTLE(2, 2,  true, 8, 4,  true)
+GEN_OPS_LITTLE(2, 2,  true, 8, 8,  true)
+GEN_OPS_LITTLE(2, 2,  true, 1, 1, false)
+GEN_OPS_LITTLE(2, 2,  true, 2, 1, false)
+GEN_OPS_LITTLE(2, 2,  true, 4, 1, false)
+GEN_OPS_LITTLE(2, 2,  true, 8, 1, false)
+GEN_OPS_LITTLE(2, 2,  true, 2, 2, false)
+GEN_OPS_LITTLE(2, 2,  true, 4, 2, false)
+GEN_OPS_LITTLE(2, 2,  true, 8, 2, false)
+GEN_OPS_LITTLE(2, 2,  true, 4, 4, false)
+GEN_OPS_LITTLE(2, 2,  true, 8, 4, false)
+GEN_OPS_LITTLE(2, 2,  true, 8, 8, false)
+GEN_OPS_LITTLE(4, 2,  true, 1, 1,  true)
+GEN_OPS_LITTLE(4, 2,  true, 2, 1,  true)
+GEN_OPS_LITTLE(4, 2,  true, 4, 1,  true)
+GEN_OPS_LITTLE(4, 2,  true, 8, 1,  true)
+GEN_OPS_LITTLE(4, 2,  true, 2, 2,  true)
+GEN_OPS_LITTLE(4, 2,  true, 4, 2,  true)
+GEN_OPS_LITTLE(4, 2,  true, 8, 2,  true)
+GEN_OPS_LITTLE(4, 2,  true, 4, 4,  true)
+GEN_OPS_LITTLE(4, 2,  true, 8, 4,  true)
+GEN_OPS_LITTLE(4, 2,  true, 8, 8,  true)
+GEN_OPS_LITTLE(4, 2,  true, 1, 1, false)
+GEN_OPS_LITTLE(4, 2,  true, 2, 1, false)
+GEN_OPS_LITTLE(4, 2,  true, 4, 1, false)
+GEN_OPS_LITTLE(4, 2,  true, 8, 1, false)
+GEN_OPS_LITTLE(4, 2,  true, 2, 2, false)
+GEN_OPS_LITTLE(4, 2,  true, 4, 2, false)
+GEN_OPS_LITTLE(4, 2,  true, 8, 2, false)
+GEN_OPS_LITTLE(4, 2,  true, 4, 4, false)
+GEN_OPS_LITTLE(4, 2,  true, 8, 4, false)
+GEN_OPS_LITTLE(4, 2,  true, 8, 8, false)
+GEN_OPS_LITTLE(8, 2,  true, 1, 1,  true)
+GEN_OPS_LITTLE(8, 2,  true, 2, 1,  true)
+GEN_OPS_LITTLE(8, 2,  true, 4, 1,  true)
+GEN_OPS_LITTLE(8, 2,  true, 8, 1,  true)
+GEN_OPS_LITTLE(8, 2,  true, 2, 2,  true)
+GEN_OPS_LITTLE(8, 2,  true, 4, 2,  true)
+GEN_OPS_LITTLE(8, 2,  true, 8, 2,  true)
+GEN_OPS_LITTLE(8, 2,  true, 4, 4,  true)
+GEN_OPS_LITTLE(8, 2,  true, 8, 4,  true)
+GEN_OPS_LITTLE(8, 2,  true, 8, 8,  true)
+GEN_OPS_LITTLE(8, 2,  true, 1, 1, false)
+GEN_OPS_LITTLE(8, 2,  true, 2, 1, false)
+GEN_OPS_LITTLE(8, 2,  true, 4, 1, false)
+GEN_OPS_LITTLE(8, 2,  true, 8, 1, false)
+GEN_OPS_LITTLE(8, 2,  true, 2, 2, false)
+GEN_OPS_LITTLE(8, 2,  true, 4, 2, false)
+GEN_OPS_LITTLE(8, 2,  true, 8, 2, false)
+GEN_OPS_LITTLE(8, 2,  true, 4, 4, false)
+GEN_OPS_LITTLE(8, 2,  true, 8, 4, false)
+GEN_OPS_LITTLE(8, 2,  true, 8, 8, false)
+GEN_OPS_LITTLE(4, 4,  true, 1, 1,  true)
+GEN_OPS_LITTLE(4, 4,  true, 2, 1,  true)
+GEN_OPS_LITTLE(4, 4,  true, 4, 1,  true)
+GEN_OPS_LITTLE(4, 4,  true, 8, 1,  true)
+GEN_OPS_LITTLE(4, 4,  true, 2, 2,  true)
+GEN_OPS_LITTLE(4, 4,  true, 4, 2,  true)
+GEN_OPS_LITTLE(4, 4,  true, 8, 2,  true)
+GEN_OPS_LITTLE(4, 4,  true, 4, 4,  true)
+GEN_OPS_LITTLE(4, 4,  true, 8, 4,  true)
+GEN_OPS_LITTLE(4, 4,  true, 8, 8,  true)
+GEN_OPS_LITTLE(4, 4,  true, 1, 1, false)
+GEN_OPS_LITTLE(4, 4,  true, 2, 1, false)
+GEN_OPS_LITTLE(4, 4,  true, 4, 1, false)
+GEN_OPS_LITTLE(4, 4,  true, 8, 1, false)
+GEN_OPS_LITTLE(4, 4,  true, 2, 2, false)
+GEN_OPS_LITTLE(4, 4,  true, 4, 2, false)
+GEN_OPS_LITTLE(4, 4,  true, 8, 2, false)
+GEN_OPS_LITTLE(4, 4,  true, 4, 4, false)
+GEN_OPS_LITTLE(4, 4,  true, 8, 4, false)
+GEN_OPS_LITTLE(4, 4,  true, 8, 8, false)
+GEN_OPS_LITTLE(8, 4,  true, 1, 1,  true)
+GEN_OPS_LITTLE(8, 4,  true, 2, 1,  true)
+GEN_OPS_LITTLE(8, 4,  true, 4, 1,  true)
+GEN_OPS_LITTLE(8, 4,  true, 8, 1,  true)
+GEN_OPS_LITTLE(8, 4,  true, 2, 2,  true)
+GEN_OPS_LITTLE(8, 4,  true, 4, 2,  true)
+GEN_OPS_LITTLE(8, 4,  true, 8, 2,  true)
+GEN_OPS_LITTLE(8, 4,  true, 4, 4,  true)
+GEN_OPS_LITTLE(8, 4,  true, 8, 4,  true)
+GEN_OPS_LITTLE(8, 4,  true, 8, 8,  true)
+GEN_OPS_LITTLE(8, 4,  true, 1, 1, false)
+GEN_OPS_LITTLE(8, 4,  true, 2, 1, false)
+GEN_OPS_LITTLE(8, 4,  true, 4, 1, false)
+GEN_OPS_LITTLE(8, 4,  true, 8, 1, false)
+GEN_OPS_LITTLE(8, 4,  true, 2, 2, false)
+GEN_OPS_LITTLE(8, 4,  true, 4, 2, false)
+GEN_OPS_LITTLE(8, 4,  true, 8, 2, false)
+GEN_OPS_LITTLE(8, 4,  true, 4, 4, false)
+GEN_OPS_LITTLE(8, 4,  true, 8, 4, false)
+GEN_OPS_LITTLE(8, 4,  true, 8, 8, false)
+GEN_OPS_LITTLE(8, 8,  true, 1, 1,  true)
+GEN_OPS_LITTLE(8, 8,  true, 2, 1,  true)
+GEN_OPS_LITTLE(8, 8,  true, 4, 1,  true)
+GEN_OPS_LITTLE(8, 8,  true, 8, 1,  true)
+GEN_OPS_LITTLE(8, 8,  true, 2, 2,  true)
+GEN_OPS_LITTLE(8, 8,  true, 4, 2,  true)
+GEN_OPS_LITTLE(8, 8,  true, 8, 2,  true)
+GEN_OPS_LITTLE(8, 8,  true, 4, 4,  true)
+GEN_OPS_LITTLE(8, 8,  true, 8, 4,  true)
+GEN_OPS_LITTLE(8, 8,  true, 8, 8,  true)
+GEN_OPS_LITTLE(8, 8,  true, 1, 1, false)
+GEN_OPS_LITTLE(8, 8,  true, 2, 1, false)
+GEN_OPS_LITTLE(8, 8,  true, 4, 1, false)
+GEN_OPS_LITTLE(8, 8,  true, 8, 1, false)
+GEN_OPS_LITTLE(8, 8,  true, 2, 2, false)
+GEN_OPS_LITTLE(8, 8,  true, 4, 2, false)
+GEN_OPS_LITTLE(8, 8,  true, 8, 2, false)
+GEN_OPS_LITTLE(8, 8,  true, 4, 4, false)
+GEN_OPS_LITTLE(8, 8,  true, 8, 4, false)
+GEN_OPS_LITTLE(8, 8,  true, 8, 8, false)
+GEN_OPS_LITTLE(1, 1, false, 1, 1,  true)
+GEN_OPS_LITTLE(1, 1, false, 2, 1,  true)
+GEN_OPS_LITTLE(1, 1, false, 4, 1,  true)
+GEN_OPS_LITTLE(1, 1, false, 8, 1,  true)
+GEN_OPS_LITTLE(1, 1, false, 2, 2,  true)
+GEN_OPS_LITTLE(1, 1, false, 4, 2,  true)
+GEN_OPS_LITTLE(1, 1, false, 8, 2,  true)
+GEN_OPS_LITTLE(1, 1, false, 4, 4,  true)
+GEN_OPS_LITTLE(1, 1, false, 8, 4,  true)
+GEN_OPS_LITTLE(1, 1, false, 8, 8,  true)
+GEN_OPS_LITTLE(1, 1, false, 1, 1, false)
+GEN_OPS_LITTLE(1, 1, false, 2, 1, false)
+GEN_OPS_LITTLE(1, 1, false, 4, 1, false)
+GEN_OPS_LITTLE(1, 1, false, 8, 1, false)
+GEN_OPS_LITTLE(1, 1, false, 2, 2, false)
+GEN_OPS_LITTLE(1, 1, false, 4, 2, false)
+GEN_OPS_LITTLE(1, 1, false, 8, 2, false)
+GEN_OPS_LITTLE(1, 1, false, 4, 4, false)
+GEN_OPS_LITTLE(1, 1, false, 8, 4, false)
+GEN_OPS_LITTLE(1, 1, false, 8, 8, false)
+GEN_OPS_LITTLE(2, 1, false, 1, 1,  true)
+GEN_OPS_LITTLE(2, 1, false, 2, 1,  true)
+GEN_OPS_LITTLE(2, 1, false, 4, 1,  true)
+GEN_OPS_LITTLE(2, 1, false, 8, 1,  true)
+GEN_OPS_LITTLE(2, 1, false, 2, 2,  true)
+GEN_OPS_LITTLE(2, 1, false, 4, 2,  true)
+GEN_OPS_LITTLE(2, 1, false, 8, 2,  true)
+GEN_OPS_LITTLE(2, 1, false, 4, 4,  true)
+GEN_OPS_LITTLE(2, 1, false, 8, 4,  true)
+GEN_OPS_LITTLE(2, 1, false, 8, 8,  true)
+GEN_OPS_LITTLE(2, 1, false, 1, 1, false)
+GEN_OPS_LITTLE(2, 1, false, 2, 1, false)
+GEN_OPS_LITTLE(2, 1, false, 4, 1, false)
+GEN_OPS_LITTLE(2, 1, false, 8, 1, false)
+GEN_OPS_LITTLE(2, 1, false, 2, 2, false)
+GEN_OPS_LITTLE(2, 1, false, 4, 2, false)
+GEN_OPS_LITTLE(2, 1, false, 8, 2, false)
+GEN_OPS_LITTLE(2, 1, false, 4, 4, false)
+GEN_OPS_LITTLE(2, 1, false, 8, 4, false)
+GEN_OPS_LITTLE(2, 1, false, 8, 8, false)
+GEN_OPS_LITTLE(4, 1, false, 1, 1,  true)
+GEN_OPS_LITTLE(4, 1, false, 2, 1,  true)
+GEN_OPS_LITTLE(4, 1, false, 4, 1,  true)
+GEN_OPS_LITTLE(4, 1, false, 8, 1,  true)
+GEN_OPS_LITTLE(4, 1, false, 2, 2,  true)
+GEN_OPS_LITTLE(4, 1, false, 4, 2,  true)
+GEN_OPS_LITTLE(4, 1, false, 8, 2,  true)
+GEN_OPS_LITTLE(4, 1, false, 4, 4,  true)
+GEN_OPS_LITTLE(4, 1, false, 8, 4,  true)
+GEN_OPS_LITTLE(4, 1, false, 8, 8,  true)
+GEN_OPS_LITTLE(4, 1, false, 1, 1, false)
+GEN_OPS_LITTLE(4, 1, false, 2, 1, false)
+GEN_OPS_LITTLE(4, 1, false, 4, 1, false)
+GEN_OPS_LITTLE(4, 1, false, 8, 1, false)
+GEN_OPS_LITTLE(4, 1, false, 2, 2, false)
+GEN_OPS_LITTLE(4, 1, false, 4, 2, false)
+GEN_OPS_LITTLE(4, 1, false, 8, 2, false)
+GEN_OPS_LITTLE(4, 1, false, 4, 4, false)
+GEN_OPS_LITTLE(4, 1, false, 8, 4, false)
+GEN_OPS_LITTLE(4, 1, false, 8, 8, false)
+GEN_OPS_LITTLE(8, 1, false, 1, 1,  true)
+GEN_OPS_LITTLE(8, 1, false, 2, 1,  true)
+GEN_OPS_LITTLE(8, 1, false, 4, 1,  true)
+GEN_OPS_LITTLE(8, 1, false, 8, 1,  true)
+GEN_OPS_LITTLE(8, 1, false, 2, 2,  true)
+GEN_OPS_LITTLE(8, 1, false, 4, 2,  true)
+GEN_OPS_LITTLE(8, 1, false, 8, 2,  true)
+GEN_OPS_LITTLE(8, 1, false, 4, 4,  true)
+GEN_OPS_LITTLE(8, 1, false, 8, 4,  true)
+GEN_OPS_LITTLE(8, 1, false, 8, 8,  true)
+GEN_OPS_LITTLE(8, 1, false, 1, 1, false)
+GEN_OPS_LITTLE(8, 1, false, 2, 1, false)
+GEN_OPS_LITTLE(8, 1, false, 4, 1, false)
+GEN_OPS_LITTLE(8, 1, false, 8, 1, false)
+GEN_OPS_LITTLE(8, 1, false, 2, 2, false)
+GEN_OPS_LITTLE(8, 1, false, 4, 2, false)
+GEN_OPS_LITTLE(8, 1, false, 8, 2, false)
+GEN_OPS_LITTLE(8, 1, false, 4, 4, false)
+GEN_OPS_LITTLE(8, 1, false, 8, 4, false)
+GEN_OPS_LITTLE(8, 1, false, 8, 8, false)
+GEN_OPS_LITTLE(2, 2, false, 1, 1,  true)
+GEN_OPS_LITTLE(2, 2, false, 2, 1,  true)
+GEN_OPS_LITTLE(2, 2, false, 4, 1,  true)
+GEN_OPS_LITTLE(2, 2, false, 8, 1,  true)
+GEN_OPS_LITTLE(2, 2, false, 2, 2,  true)
+GEN_OPS_LITTLE(2, 2, false, 4, 2,  true)
+GEN_OPS_LITTLE(2, 2, false, 8, 2,  true)
+GEN_OPS_LITTLE(2, 2, false, 4, 4,  true)
+GEN_OPS_LITTLE(2, 2, false, 8, 4,  true)
+GEN_OPS_LITTLE(2, 2, false, 8, 8,  true)
+GEN_OPS_LITTLE(2, 2, false, 1, 1, false)
+GEN_OPS_LITTLE(2, 2, false, 2, 1, false)
+GEN_OPS_LITTLE(2, 2, false, 4, 1, false)
+GEN_OPS_LITTLE(2, 2, false, 8, 1, false)
+GEN_OPS_LITTLE(2, 2, false, 2, 2, false)
+GEN_OPS_LITTLE(2, 2, false, 4, 2, false)
+GEN_OPS_LITTLE(2, 2, false, 8, 2, false)
+GEN_OPS_LITTLE(2, 2, false, 4, 4, false)
+GEN_OPS_LITTLE(2, 2, false, 8, 4, false)
+GEN_OPS_LITTLE(2, 2, false, 8, 8, false)
+GEN_OPS_LITTLE(4, 2, false, 1, 1,  true)
+GEN_OPS_LITTLE(4, 2, false, 2, 1,  true)
+GEN_OPS_LITTLE(4, 2, false, 4, 1,  true)
+GEN_OPS_LITTLE(4, 2, false, 8, 1,  true)
+GEN_OPS_LITTLE(4, 2, false, 2, 2,  true)
+GEN_OPS_LITTLE(4, 2, false, 4, 2,  true)
+GEN_OPS_LITTLE(4, 2, false, 8, 2,  true)
+GEN_OPS_LITTLE(4, 2, false, 4, 4,  true)
+GEN_OPS_LITTLE(4, 2, false, 8, 4,  true)
+GEN_OPS_LITTLE(4, 2, false, 8, 8,  true)
+GEN_OPS_LITTLE(4, 2, false, 1, 1, false)
+GEN_OPS_LITTLE(4, 2, false, 2, 1, false)
+GEN_OPS_LITTLE(4, 2, false, 4, 1, false)
+GEN_OPS_LITTLE(4, 2, false, 8, 1, false)
+GEN_OPS_LITTLE(4, 2, false, 2, 2, false)
+GEN_OPS_LITTLE(4, 2, false, 4, 2, false)
+GEN_OPS_LITTLE(4, 2, false, 8, 2, false)
+GEN_OPS_LITTLE(4, 2, false, 4, 4, false)
+GEN_OPS_LITTLE(4, 2, false, 8, 4, false)
+GEN_OPS_LITTLE(4, 2, false, 8, 8, false)
+GEN_OPS_LITTLE(8, 2, false, 1, 1,  true)
+GEN_OPS_LITTLE(8, 2, false, 2, 1,  true)
+GEN_OPS_LITTLE(8, 2, false, 4, 1,  true)
+GEN_OPS_LITTLE(8, 2, false, 8, 1,  true)
+GEN_OPS_LITTLE(8, 2, false, 2, 2,  true)
+GEN_OPS_LITTLE(8, 2, false, 4, 2,  true)
+GEN_OPS_LITTLE(8, 2, false, 8, 2,  true)
+GEN_OPS_LITTLE(8, 2, false, 4, 4,  true)
+GEN_OPS_LITTLE(8, 2, false, 8, 4,  true)
+GEN_OPS_LITTLE(8, 2, false, 8, 8,  true)
+GEN_OPS_LITTLE(8, 2, false, 1, 1, false)
+GEN_OPS_LITTLE(8, 2, false, 2, 1, false)
+GEN_OPS_LITTLE(8, 2, false, 4, 1, false)
+GEN_OPS_LITTLE(8, 2, false, 8, 1, false)
+GEN_OPS_LITTLE(8, 2, false, 2, 2, false)
+GEN_OPS_LITTLE(8, 2, false, 4, 2, false)
+GEN_OPS_LITTLE(8, 2, false, 8, 2, false)
+GEN_OPS_LITTLE(8, 2, false, 4, 4, false)
+GEN_OPS_LITTLE(8, 2, false, 8, 4, false)
+GEN_OPS_LITTLE(8, 2, false, 8, 8, false)
+GEN_OPS_LITTLE(4, 4, false, 1, 1,  true)
+GEN_OPS_LITTLE(4, 4, false, 2, 1,  true)
+GEN_OPS_LITTLE(4, 4, false, 4, 1,  true)
+GEN_OPS_LITTLE(4, 4, false, 8, 1,  true)
+GEN_OPS_LITTLE(4, 4, false, 2, 2,  true)
+GEN_OPS_LITTLE(4, 4, false, 4, 2,  true)
+GEN_OPS_LITTLE(4, 4, false, 8, 2,  true)
+GEN_OPS_LITTLE(4, 4, false, 4, 4,  true)
+GEN_OPS_LITTLE(4, 4, false, 8, 4,  true)
+GEN_OPS_LITTLE(4, 4, false, 8, 8,  true)
+GEN_OPS_LITTLE(4, 4, false, 1, 1, false)
+GEN_OPS_LITTLE(4, 4, false, 2, 1, false)
+GEN_OPS_LITTLE(4, 4, false, 4, 1, false)
+GEN_OPS_LITTLE(4, 4, false, 8, 1, false)
+GEN_OPS_LITTLE(4, 4, false, 2, 2, false)
+GEN_OPS_LITTLE(4, 4, false, 4, 2, false)
+GEN_OPS_LITTLE(4, 4, false, 8, 2, false)
+GEN_OPS_LITTLE(4, 4, false, 4, 4, false)
+GEN_OPS_LITTLE(4, 4, false, 8, 4, false)
+GEN_OPS_LITTLE(4, 4, false, 8, 8, false)
+GEN_OPS_LITTLE(8, 4, false, 1, 1,  true)
+GEN_OPS_LITTLE(8, 4, false, 2, 1,  true)
+GEN_OPS_LITTLE(8, 4, false, 4, 1,  true)
+GEN_OPS_LITTLE(8, 4, false, 8, 1,  true)
+GEN_OPS_LITTLE(8, 4, false, 2, 2,  true)
+GEN_OPS_LITTLE(8, 4, false, 4, 2,  true)
+GEN_OPS_LITTLE(8, 4, false, 8, 2,  true)
+GEN_OPS_LITTLE(8, 4, false, 4, 4,  true)
+GEN_OPS_LITTLE(8, 4, false, 8, 4,  true)
+GEN_OPS_LITTLE(8, 4, false, 8, 8,  true)
+GEN_OPS_LITTLE(8, 4, false, 1, 1, false)
+GEN_OPS_LITTLE(8, 4, false, 2, 1, false)
+GEN_OPS_LITTLE(8, 4, false, 4, 1, false)
+GEN_OPS_LITTLE(8, 4, false, 8, 1, false)
+GEN_OPS_LITTLE(8, 4, false, 2, 2, false)
+GEN_OPS_LITTLE(8, 4, false, 4, 2, false)
+GEN_OPS_LITTLE(8, 4, false, 8, 2, false)
+GEN_OPS_LITTLE(8, 4, false, 4, 4, false)
+GEN_OPS_LITTLE(8, 4, false, 8, 4, false)
+GEN_OPS_LITTLE(8, 4, false, 8, 8, false)
+GEN_OPS_LITTLE(8, 8, false, 1, 1,  true)
+GEN_OPS_LITTLE(8, 8, false, 2, 1,  true)
+GEN_OPS_LITTLE(8, 8, false, 4, 1,  true)
+GEN_OPS_LITTLE(8, 8, false, 8, 1,  true)
+GEN_OPS_LITTLE(8, 8, false, 2, 2,  true)
+GEN_OPS_LITTLE(8, 8, false, 4, 2,  true)
+GEN_OPS_LITTLE(8, 8, false, 8, 2,  true)
+GEN_OPS_LITTLE(8, 8, false, 4, 4,  true)
+GEN_OPS_LITTLE(8, 8, false, 8, 4,  true)
+GEN_OPS_LITTLE(8, 8, false, 8, 8,  true)
+GEN_OPS_LITTLE(8, 8, false, 1, 1, false)
+GEN_OPS_LITTLE(8, 8, false, 2, 1, false)
+GEN_OPS_LITTLE(8, 8, false, 4, 1, false)
+GEN_OPS_LITTLE(8, 8, false, 8, 1, false)
+GEN_OPS_LITTLE(8, 8, false, 2, 2, false)
+GEN_OPS_LITTLE(8, 8, false, 4, 2, false)
+GEN_OPS_LITTLE(8, 8, false, 8, 2, false)
+GEN_OPS_LITTLE(8, 8, false, 4, 4, false)
+GEN_OPS_LITTLE(8, 8, false, 8, 4, false)
+GEN_OPS_LITTLE(8, 8, false, 8, 8, false)
+
+GEN_OPS_BIG(1, 1,  true, 1, 1,  true)
+GEN_OPS_BIG(1, 1,  true, 2, 1,  true)
+GEN_OPS_BIG(1, 1,  true, 4, 1,  true)
+GEN_OPS_BIG(1, 1,  true, 8, 1,  true)
+GEN_OPS_BIG(1, 1,  true, 2, 2,  true)
+GEN_OPS_BIG(1, 1,  true, 4, 2,  true)
+GEN_OPS_BIG(1, 1,  true, 8, 2,  true)
+GEN_OPS_BIG(1, 1,  true, 4, 4,  true)
+GEN_OPS_BIG(1, 1,  true, 8, 4,  true)
+GEN_OPS_BIG(1, 1,  true, 8, 8,  true)
+GEN_OPS_BIG(1, 1,  true, 1, 1, false)
+GEN_OPS_BIG(1, 1,  true, 2, 1, false)
+GEN_OPS_BIG(1, 1,  true, 4, 1, false)
+GEN_OPS_BIG(1, 1,  true, 8, 1, false)
+GEN_OPS_BIG(1, 1,  true, 2, 2, false)
+GEN_OPS_BIG(1, 1,  true, 4, 2, false)
+GEN_OPS_BIG(1, 1,  true, 8, 2, false)
+GEN_OPS_BIG(1, 1,  true, 4, 4, false)
+GEN_OPS_BIG(1, 1,  true, 8, 4, false)
+GEN_OPS_BIG(1, 1,  true, 8, 8, false)
+GEN_OPS_BIG(2, 1,  true, 1, 1,  true)
+GEN_OPS_BIG(2, 1,  true, 2, 1,  true)
+GEN_OPS_BIG(2, 1,  true, 4, 1,  true)
+GEN_OPS_BIG(2, 1,  true, 8, 1,  true)
+GEN_OPS_BIG(2, 1,  true, 2, 2,  true)
+GEN_OPS_BIG(2, 1,  true, 4, 2,  true)
+GEN_OPS_BIG(2, 1,  true, 8, 2,  true)
+GEN_OPS_BIG(2, 1,  true, 4, 4,  true)
+GEN_OPS_BIG(2, 1,  true, 8, 4,  true)
+GEN_OPS_BIG(2, 1,  true, 8, 8,  true)
+GEN_OPS_BIG(2, 1,  true, 1, 1, false)
+GEN_OPS_BIG(2, 1,  true, 2, 1, false)
+GEN_OPS_BIG(2, 1,  true, 4, 1, false)
+GEN_OPS_BIG(2, 1,  true, 8, 1, false)
+GEN_OPS_BIG(2, 1,  true, 2, 2, false)
+GEN_OPS_BIG(2, 1,  true, 4, 2, false)
+GEN_OPS_BIG(2, 1,  true, 8, 2, false)
+GEN_OPS_BIG(2, 1,  true, 4, 4, false)
+GEN_OPS_BIG(2, 1,  true, 8, 4, false)
+GEN_OPS_BIG(2, 1,  true, 8, 8, false)
+GEN_OPS_BIG(4, 1,  true, 1, 1,  true)
+GEN_OPS_BIG(4, 1,  true, 2, 1,  true)
+GEN_OPS_BIG(4, 1,  true, 4, 1,  true)
+GEN_OPS_BIG(4, 1,  true, 8, 1,  true)
+GEN_OPS_BIG(4, 1,  true, 2, 2,  true)
+GEN_OPS_BIG(4, 1,  true, 4, 2,  true)
+GEN_OPS_BIG(4, 1,  true, 8, 2,  true)
+GEN_OPS_BIG(4, 1,  true, 4, 4,  true)
+GEN_OPS_BIG(4, 1,  true, 8, 4,  true)
+GEN_OPS_BIG(4, 1,  true, 8, 8,  true)
+GEN_OPS_BIG(4, 1,  true, 1, 1, false)
+GEN_OPS_BIG(4, 1,  true, 2, 1, false)
+GEN_OPS_BIG(4, 1,  true, 4, 1, false)
+GEN_OPS_BIG(4, 1,  true, 8, 1, false)
+GEN_OPS_BIG(4, 1,  true, 2, 2, false)
+GEN_OPS_BIG(4, 1,  true, 4, 2, false)
+GEN_OPS_BIG(4, 1,  true, 8, 2, false)
+GEN_OPS_BIG(4, 1,  true, 4, 4, false)
+GEN_OPS_BIG(4, 1,  true, 8, 4, false)
+GEN_OPS_BIG(4, 1,  true, 8, 8, false)
+GEN_OPS_BIG(8, 1,  true, 1, 1,  true)
+GEN_OPS_BIG(8, 1,  true, 2, 1,  true)
+GEN_OPS_BIG(8, 1,  true, 4, 1,  true)
+GEN_OPS_BIG(8, 1,  true, 8, 1,  true)
+GEN_OPS_BIG(8, 1,  true, 2, 2,  true)
+GEN_OPS_BIG(8, 1,  true, 4, 2,  true)
+GEN_OPS_BIG(8, 1,  true, 8, 2,  true)
+GEN_OPS_BIG(8, 1,  true, 4, 4,  true)
+GEN_OPS_BIG(8, 1,  true, 8, 4,  true)
+GEN_OPS_BIG(8, 1,  true, 8, 8,  true)
+GEN_OPS_BIG(8, 1,  true, 1, 1, false)
+GEN_OPS_BIG(8, 1,  true, 2, 1, false)
+GEN_OPS_BIG(8, 1,  true, 4, 1, false)
+GEN_OPS_BIG(8, 1,  true, 8, 1, false)
+GEN_OPS_BIG(8, 1,  true, 2, 2, false)
+GEN_OPS_BIG(8, 1,  true, 4, 2, false)
+GEN_OPS_BIG(8, 1,  true, 8, 2, false)
+GEN_OPS_BIG(8, 1,  true, 4, 4, false)
+GEN_OPS_BIG(8, 1,  true, 8, 4, false)
+GEN_OPS_BIG(8, 1,  true, 8, 8, false)
+GEN_OPS_BIG(2, 2,  true, 1, 1,  true)
+GEN_OPS_BIG(2, 2,  true, 2, 1,  true)
+GEN_OPS_BIG(2, 2,  true, 4, 1,  true)
+GEN_OPS_BIG(2, 2,  true, 8, 1,  true)
+GEN_OPS_BIG(2, 2,  true, 2, 2,  true)
+GEN_OPS_BIG(2, 2,  true, 4, 2,  true)
+GEN_OPS_BIG(2, 2,  true, 8, 2,  true)
+GEN_OPS_BIG(2, 2,  true, 4, 4,  true)
+GEN_OPS_BIG(2, 2,  true, 8, 4,  true)
+GEN_OPS_BIG(2, 2,  true, 8, 8,  true)
+GEN_OPS_BIG(2, 2,  true, 1, 1, false)
+GEN_OPS_BIG(2, 2,  true, 2, 1, false)
+GEN_OPS_BIG(2, 2,  true, 4, 1, false)
+GEN_OPS_BIG(2, 2,  true, 8, 1, false)
+GEN_OPS_BIG(2, 2,  true, 2, 2, false)
+GEN_OPS_BIG(2, 2,  true, 4, 2, false)
+GEN_OPS_BIG(2, 2,  true, 8, 2, false)
+GEN_OPS_BIG(2, 2,  true, 4, 4, false)
+GEN_OPS_BIG(2, 2,  true, 8, 4, false)
+GEN_OPS_BIG(2, 2,  true, 8, 8, false)
+GEN_OPS_BIG(4, 2,  true, 1, 1,  true)
+GEN_OPS_BIG(4, 2,  true, 2, 1,  true)
+GEN_OPS_BIG(4, 2,  true, 4, 1,  true)
+GEN_OPS_BIG(4, 2,  true, 8, 1,  true)
+GEN_OPS_BIG(4, 2,  true, 2, 2,  true)
+GEN_OPS_BIG(4, 2,  true, 4, 2,  true)
+GEN_OPS_BIG(4, 2,  true, 8, 2,  true)
+GEN_OPS_BIG(4, 2,  true, 4, 4,  true)
+GEN_OPS_BIG(4, 2,  true, 8, 4,  true)
+GEN_OPS_BIG(4, 2,  true, 8, 8,  true)
+GEN_OPS_BIG(4, 2,  true, 1, 1, false)
+GEN_OPS_BIG(4, 2,  true, 2, 1, false)
+GEN_OPS_BIG(4, 2,  true, 4, 1, false)
+GEN_OPS_BIG(4, 2,  true, 8, 1, false)
+GEN_OPS_BIG(4, 2,  true, 2, 2, false)
+GEN_OPS_BIG(4, 2,  true, 4, 2, false)
+GEN_OPS_BIG(4, 2,  true, 8, 2, false)
+GEN_OPS_BIG(4, 2,  true, 4, 4, false)
+GEN_OPS_BIG(4, 2,  true, 8, 4, false)
+GEN_OPS_BIG(4, 2,  true, 8, 8, false)
+GEN_OPS_BIG(8, 2,  true, 1, 1,  true)
+GEN_OPS_BIG(8, 2,  true, 2, 1,  true)
+GEN_OPS_BIG(8, 2,  true, 4, 1,  true)
+GEN_OPS_BIG(8, 2,  true, 8, 1,  true)
+GEN_OPS_BIG(8, 2,  true, 2, 2,  true)
+GEN_OPS_BIG(8, 2,  true, 4, 2,  true)
+GEN_OPS_BIG(8, 2,  true, 8, 2,  true)
+GEN_OPS_BIG(8, 2,  true, 4, 4,  true)
+GEN_OPS_BIG(8, 2,  true, 8, 4,  true)
+GEN_OPS_BIG(8, 2,  true, 8, 8,  true)
+GEN_OPS_BIG(8, 2,  true, 1, 1, false)
+GEN_OPS_BIG(8, 2,  true, 2, 1, false)
+GEN_OPS_BIG(8, 2,  true, 4, 1, false)
+GEN_OPS_BIG(8, 2,  true, 8, 1, false)
+GEN_OPS_BIG(8, 2,  true, 2, 2, false)
+GEN_OPS_BIG(8, 2,  true, 4, 2, false)
+GEN_OPS_BIG(8, 2,  true, 8, 2, false)
+GEN_OPS_BIG(8, 2,  true, 4, 4, false)
+GEN_OPS_BIG(8, 2,  true, 8, 4, false)
+GEN_OPS_BIG(8, 2,  true, 8, 8, false)
+GEN_OPS_BIG(4, 4,  true, 1, 1,  true)
+GEN_OPS_BIG(4, 4,  true, 2, 1,  true)
+GEN_OPS_BIG(4, 4,  true, 4, 1,  true)
+GEN_OPS_BIG(4, 4,  true, 8, 1,  true)
+GEN_OPS_BIG(4, 4,  true, 2, 2,  true)
+GEN_OPS_BIG(4, 4,  true, 4, 2,  true)
+GEN_OPS_BIG(4, 4,  true, 8, 2,  true)
+GEN_OPS_BIG(4, 4,  true, 4, 4,  true)
+GEN_OPS_BIG(4, 4,  true, 8, 4,  true)
+GEN_OPS_BIG(4, 4,  true, 8, 8,  true)
+GEN_OPS_BIG(4, 4,  true, 1, 1, false)
+GEN_OPS_BIG(4, 4,  true, 2, 1, false)
+GEN_OPS_BIG(4, 4,  true, 4, 1, false)
+GEN_OPS_BIG(4, 4,  true, 8, 1, false)
+GEN_OPS_BIG(4, 4,  true, 2, 2, false)
+GEN_OPS_BIG(4, 4,  true, 4, 2, false)
+GEN_OPS_BIG(4, 4,  true, 8, 2, false)
+GEN_OPS_BIG(4, 4,  true, 4, 4, false)
+GEN_OPS_BIG(4, 4,  true, 8, 4, false)
+GEN_OPS_BIG(4, 4,  true, 8, 8, false)
+GEN_OPS_BIG(8, 4,  true, 1, 1,  true)
+GEN_OPS_BIG(8, 4,  true, 2, 1,  true)
+GEN_OPS_BIG(8, 4,  true, 4, 1,  true)
+GEN_OPS_BIG(8, 4,  true, 8, 1,  true)
+GEN_OPS_BIG(8, 4,  true, 2, 2,  true)
+GEN_OPS_BIG(8, 4,  true, 4, 2,  true)
+GEN_OPS_BIG(8, 4,  true, 8, 2,  true)
+GEN_OPS_BIG(8, 4,  true, 4, 4,  true)
+GEN_OPS_BIG(8, 4,  true, 8, 4,  true)
+GEN_OPS_BIG(8, 4,  true, 8, 8,  true)
+GEN_OPS_BIG(8, 4,  true, 1, 1, false)
+GEN_OPS_BIG(8, 4,  true, 2, 1, false)
+GEN_OPS_BIG(8, 4,  true, 4, 1, false)
+GEN_OPS_BIG(8, 4,  true, 8, 1, false)
+GEN_OPS_BIG(8, 4,  true, 2, 2, false)
+GEN_OPS_BIG(8, 4,  true, 4, 2, false)
+GEN_OPS_BIG(8, 4,  true, 8, 2, false)
+GEN_OPS_BIG(8, 4,  true, 4, 4, false)
+GEN_OPS_BIG(8, 4,  true, 8, 4, false)
+GEN_OPS_BIG(8, 4,  true, 8, 8, false)
+GEN_OPS_BIG(8, 8,  true, 1, 1,  true)
+GEN_OPS_BIG(8, 8,  true, 2, 1,  true)
+GEN_OPS_BIG(8, 8,  true, 4, 1,  true)
+GEN_OPS_BIG(8, 8,  true, 8, 1,  true)
+GEN_OPS_BIG(8, 8,  true, 2, 2,  true)
+GEN_OPS_BIG(8, 8,  true, 4, 2,  true)
+GEN_OPS_BIG(8, 8,  true, 8, 2,  true)
+GEN_OPS_BIG(8, 8,  true, 4, 4,  true)
+GEN_OPS_BIG(8, 8,  true, 8, 4,  true)
+GEN_OPS_BIG(8, 8,  true, 8, 8,  true)
+GEN_OPS_BIG(8, 8,  true, 1, 1, false)
+GEN_OPS_BIG(8, 8,  true, 2, 1, false)
+GEN_OPS_BIG(8, 8,  true, 4, 1, false)
+GEN_OPS_BIG(8, 8,  true, 8, 1, false)
+GEN_OPS_BIG(8, 8,  true, 2, 2, false)
+GEN_OPS_BIG(8, 8,  true, 4, 2, false)
+GEN_OPS_BIG(8, 8,  true, 8, 2, false)
+GEN_OPS_BIG(8, 8,  true, 4, 4, false)
+GEN_OPS_BIG(8, 8,  true, 8, 4, false)
+GEN_OPS_BIG(8, 8,  true, 8, 8, false)
+GEN_OPS_BIG(1, 1, false, 1, 1,  true)
+GEN_OPS_BIG(1, 1, false, 2, 1,  true)
+GEN_OPS_BIG(1, 1, false, 4, 1,  true)
+GEN_OPS_BIG(1, 1, false, 8, 1,  true)
+GEN_OPS_BIG(1, 1, false, 2, 2,  true)
+GEN_OPS_BIG(1, 1, false, 4, 2,  true)
+GEN_OPS_BIG(1, 1, false, 8, 2,  true)
+GEN_OPS_BIG(1, 1, false, 4, 4,  true)
+GEN_OPS_BIG(1, 1, false, 8, 4,  true)
+GEN_OPS_BIG(1, 1, false, 8, 8,  true)
+GEN_OPS_BIG(1, 1, false, 1, 1, false)
+GEN_OPS_BIG(1, 1, false, 2, 1, false)
+GEN_OPS_BIG(1, 1, false, 4, 1, false)
+GEN_OPS_BIG(1, 1, false, 8, 1, false)
+GEN_OPS_BIG(1, 1, false, 2, 2, false)
+GEN_OPS_BIG(1, 1, false, 4, 2, false)
+GEN_OPS_BIG(1, 1, false, 8, 2, false)
+GEN_OPS_BIG(1, 1, false, 4, 4, false)
+GEN_OPS_BIG(1, 1, false, 8, 4, false)
+GEN_OPS_BIG(1, 1, false, 8, 8, false)
+GEN_OPS_BIG(2, 1, false, 1, 1,  true)
+GEN_OPS_BIG(2, 1, false, 2, 1,  true)
+GEN_OPS_BIG(2, 1, false, 4, 1,  true)
+GEN_OPS_BIG(2, 1, false, 8, 1,  true)
+GEN_OPS_BIG(2, 1, false, 2, 2,  true)
+GEN_OPS_BIG(2, 1, false, 4, 2,  true)
+GEN_OPS_BIG(2, 1, false, 8, 2,  true)
+GEN_OPS_BIG(2, 1, false, 4, 4,  true)
+GEN_OPS_BIG(2, 1, false, 8, 4,  true)
+GEN_OPS_BIG(2, 1, false, 8, 8,  true)
+GEN_OPS_BIG(2, 1, false, 1, 1, false)
+GEN_OPS_BIG(2, 1, false, 2, 1, false)
+GEN_OPS_BIG(2, 1, false, 4, 1, false)
+GEN_OPS_BIG(2, 1, false, 8, 1, false)
+GEN_OPS_BIG(2, 1, false, 2, 2, false)
+GEN_OPS_BIG(2, 1, false, 4, 2, false)
+GEN_OPS_BIG(2, 1, false, 8, 2, false)
+GEN_OPS_BIG(2, 1, false, 4, 4, false)
+GEN_OPS_BIG(2, 1, false, 8, 4, false)
+GEN_OPS_BIG(2, 1, false, 8, 8, false)
+GEN_OPS_BIG(4, 1, false, 1, 1,  true)
+GEN_OPS_BIG(4, 1, false, 2, 1,  true)
+GEN_OPS_BIG(4, 1, false, 4, 1,  true)
+GEN_OPS_BIG(4, 1, false, 8, 1,  true)
+GEN_OPS_BIG(4, 1, false, 2, 2,  true)
+GEN_OPS_BIG(4, 1, false, 4, 2,  true)
+GEN_OPS_BIG(4, 1, false, 8, 2,  true)
+GEN_OPS_BIG(4, 1, false, 4, 4,  true)
+GEN_OPS_BIG(4, 1, false, 8, 4,  true)
+GEN_OPS_BIG(4, 1, false, 8, 8,  true)
+GEN_OPS_BIG(4, 1, false, 1, 1, false)
+GEN_OPS_BIG(4, 1, false, 2, 1, false)
+GEN_OPS_BIG(4, 1, false, 4, 1, false)
+GEN_OPS_BIG(4, 1, false, 8, 1, false)
+GEN_OPS_BIG(4, 1, false, 2, 2, false)
+GEN_OPS_BIG(4, 1, false, 4, 2, false)
+GEN_OPS_BIG(4, 1, false, 8, 2, false)
+GEN_OPS_BIG(4, 1, false, 4, 4, false)
+GEN_OPS_BIG(4, 1, false, 8, 4, false)
+GEN_OPS_BIG(4, 1, false, 8, 8, false)
+GEN_OPS_BIG(8, 1, false, 1, 1,  true)
+GEN_OPS_BIG(8, 1, false, 2, 1,  true)
+GEN_OPS_BIG(8, 1, false, 4, 1,  true)
+GEN_OPS_BIG(8, 1, false, 8, 1,  true)
+GEN_OPS_BIG(8, 1, false, 2, 2,  true)
+GEN_OPS_BIG(8, 1, false, 4, 2,  true)
+GEN_OPS_BIG(8, 1, false, 8, 2,  true)
+GEN_OPS_BIG(8, 1, false, 4, 4,  true)
+GEN_OPS_BIG(8, 1, false, 8, 4,  true)
+GEN_OPS_BIG(8, 1, false, 8, 8,  true)
+GEN_OPS_BIG(8, 1, false, 1, 1, false)
+GEN_OPS_BIG(8, 1, false, 2, 1, false)
+GEN_OPS_BIG(8, 1, false, 4, 1, false)
+GEN_OPS_BIG(8, 1, false, 8, 1, false)
+GEN_OPS_BIG(8, 1, false, 2, 2, false)
+GEN_OPS_BIG(8, 1, false, 4, 2, false)
+GEN_OPS_BIG(8, 1, false, 8, 2, false)
+GEN_OPS_BIG(8, 1, false, 4, 4, false)
+GEN_OPS_BIG(8, 1, false, 8, 4, false)
+GEN_OPS_BIG(8, 1, false, 8, 8, false)
+GEN_OPS_BIG(2, 2, false, 1, 1,  true)
+GEN_OPS_BIG(2, 2, false, 2, 1,  true)
+GEN_OPS_BIG(2, 2, false, 4, 1,  true)
+GEN_OPS_BIG(2, 2, false, 8, 1,  true)
+GEN_OPS_BIG(2, 2, false, 2, 2,  true)
+GEN_OPS_BIG(2, 2, false, 4, 2,  true)
+GEN_OPS_BIG(2, 2, false, 8, 2,  true)
+GEN_OPS_BIG(2, 2, false, 4, 4,  true)
+GEN_OPS_BIG(2, 2, false, 8, 4,  true)
+GEN_OPS_BIG(2, 2, false, 8, 8,  true)
+GEN_OPS_BIG(2, 2, false, 1, 1, false)
+GEN_OPS_BIG(2, 2, false, 2, 1, false)
+GEN_OPS_BIG(2, 2, false, 4, 1, false)
+GEN_OPS_BIG(2, 2, false, 8, 1, false)
+GEN_OPS_BIG(2, 2, false, 2, 2, false)
+GEN_OPS_BIG(2, 2, false, 4, 2, false)
+GEN_OPS_BIG(2, 2, false, 8, 2, false)
+GEN_OPS_BIG(2, 2, false, 4, 4, false)
+GEN_OPS_BIG(2, 2, false, 8, 4, false)
+GEN_OPS_BIG(2, 2, false, 8, 8, false)
+GEN_OPS_BIG(4, 2, false, 1, 1,  true)
+GEN_OPS_BIG(4, 2, false, 2, 1,  true)
+GEN_OPS_BIG(4, 2, false, 4, 1,  true)
+GEN_OPS_BIG(4, 2, false, 8, 1,  true)
+GEN_OPS_BIG(4, 2, false, 2, 2,  true)
+GEN_OPS_BIG(4, 2, false, 4, 2,  true)
+GEN_OPS_BIG(4, 2, false, 8, 2,  true)
+GEN_OPS_BIG(4, 2, false, 4, 4,  true)
+GEN_OPS_BIG(4, 2, false, 8, 4,  true)
+GEN_OPS_BIG(4, 2, false, 8, 8,  true)
+GEN_OPS_BIG(4, 2, false, 1, 1, false)
+GEN_OPS_BIG(4, 2, false, 2, 1, false)
+GEN_OPS_BIG(4, 2, false, 4, 1, false)
+GEN_OPS_BIG(4, 2, false, 8, 1, false)
+GEN_OPS_BIG(4, 2, false, 2, 2, false)
+GEN_OPS_BIG(4, 2, false, 4, 2, false)
+GEN_OPS_BIG(4, 2, false, 8, 2, false)
+GEN_OPS_BIG(4, 2, false, 4, 4, false)
+GEN_OPS_BIG(4, 2, false, 8, 4, false)
+GEN_OPS_BIG(4, 2, false, 8, 8, false)
+GEN_OPS_BIG(8, 2, false, 1, 1,  true)
+GEN_OPS_BIG(8, 2, false, 2, 1,  true)
+GEN_OPS_BIG(8, 2, false, 4, 1,  true)
+GEN_OPS_BIG(8, 2, false, 8, 1,  true)
+GEN_OPS_BIG(8, 2, false, 2, 2,  true)
+GEN_OPS_BIG(8, 2, false, 4, 2,  true)
+GEN_OPS_BIG(8, 2, false, 8, 2,  true)
+GEN_OPS_BIG(8, 2, false, 4, 4,  true)
+GEN_OPS_BIG(8, 2, false, 8, 4,  true)
+GEN_OPS_BIG(8, 2, false, 8, 8,  true)
+GEN_OPS_BIG(8, 2, false, 1, 1, false)
+GEN_OPS_BIG(8, 2, false, 2, 1, false)
+GEN_OPS_BIG(8, 2, false, 4, 1, false)
+GEN_OPS_BIG(8, 2, false, 8, 1, false)
+GEN_OPS_BIG(8, 2, false, 2, 2, false)
+GEN_OPS_BIG(8, 2, false, 4, 2, false)
+GEN_OPS_BIG(8, 2, false, 8, 2, false)
+GEN_OPS_BIG(8, 2, false, 4, 4, false)
+GEN_OPS_BIG(8, 2, false, 8, 4, false)
+GEN_OPS_BIG(8, 2, false, 8, 8, false)
+GEN_OPS_BIG(4, 4, false, 1, 1,  true)
+GEN_OPS_BIG(4, 4, false, 2, 1,  true)
+GEN_OPS_BIG(4, 4, false, 4, 1,  true)
+GEN_OPS_BIG(4, 4, false, 8, 1,  true)
+GEN_OPS_BIG(4, 4, false, 2, 2,  true)
+GEN_OPS_BIG(4, 4, false, 4, 2,  true)
+GEN_OPS_BIG(4, 4, false, 8, 2,  true)
+GEN_OPS_BIG(4, 4, false, 4, 4,  true)
+GEN_OPS_BIG(4, 4, false, 8, 4,  true)
+GEN_OPS_BIG(4, 4, false, 8, 8,  true)
+GEN_OPS_BIG(4, 4, false, 1, 1, false)
+GEN_OPS_BIG(4, 4, false, 2, 1, false)
+GEN_OPS_BIG(4, 4, false, 4, 1, false)
+GEN_OPS_BIG(4, 4, false, 8, 1, false)
+GEN_OPS_BIG(4, 4, false, 2, 2, false)
+GEN_OPS_BIG(4, 4, false, 4, 2, false)
+GEN_OPS_BIG(4, 4, false, 8, 2, false)
+GEN_OPS_BIG(4, 4, false, 4, 4, false)
+GEN_OPS_BIG(4, 4, false, 8, 4, false)
+GEN_OPS_BIG(4, 4, false, 8, 8, false)
+GEN_OPS_BIG(8, 4, false, 1, 1,  true)
+GEN_OPS_BIG(8, 4, false, 2, 1,  true)
+GEN_OPS_BIG(8, 4, false, 4, 1,  true)
+GEN_OPS_BIG(8, 4, false, 8, 1,  true)
+GEN_OPS_BIG(8, 4, false, 2, 2,  true)
+GEN_OPS_BIG(8, 4, false, 4, 2,  true)
+GEN_OPS_BIG(8, 4, false, 8, 2,  true)
+GEN_OPS_BIG(8, 4, false, 4, 4,  true)
+GEN_OPS_BIG(8, 4, false, 8, 4,  true)
+GEN_OPS_BIG(8, 4, false, 8, 8,  true)
+GEN_OPS_BIG(8, 4, false, 1, 1, false)
+GEN_OPS_BIG(8, 4, false, 2, 1, false)
+GEN_OPS_BIG(8, 4, false, 4, 1, false)
+GEN_OPS_BIG(8, 4, false, 8, 1, false)
+GEN_OPS_BIG(8, 4, false, 2, 2, false)
+GEN_OPS_BIG(8, 4, false, 4, 2, false)
+GEN_OPS_BIG(8, 4, false, 8, 2, false)
+GEN_OPS_BIG(8, 4, false, 4, 4, false)
+GEN_OPS_BIG(8, 4, false, 8, 4, false)
+GEN_OPS_BIG(8, 4, false, 8, 8, false)
+GEN_OPS_BIG(8, 8, false, 1, 1,  true)
+GEN_OPS_BIG(8, 8, false, 2, 1,  true)
+GEN_OPS_BIG(8, 8, false, 4, 1,  true)
+GEN_OPS_BIG(8, 8, false, 8, 1,  true)
+GEN_OPS_BIG(8, 8, false, 2, 2,  true)
+GEN_OPS_BIG(8, 8, false, 4, 2,  true)
+GEN_OPS_BIG(8, 8, false, 8, 2,  true)
+GEN_OPS_BIG(8, 8, false, 4, 4,  true)
+GEN_OPS_BIG(8, 8, false, 8, 4,  true)
+GEN_OPS_BIG(8, 8, false, 8, 8,  true)
+GEN_OPS_BIG(8, 8, false, 1, 1, false)
+GEN_OPS_BIG(8, 8, false, 2, 1, false)
+GEN_OPS_BIG(8, 8, false, 4, 1, false)
+GEN_OPS_BIG(8, 8, false, 8, 1, false)
+GEN_OPS_BIG(8, 8, false, 2, 2, false)
+GEN_OPS_BIG(8, 8, false, 4, 2, false)
+GEN_OPS_BIG(8, 8, false, 8, 2, false)
+GEN_OPS_BIG(8, 8, false, 4, 4, false)
+GEN_OPS_BIG(8, 8, false, 8, 4, false)
+GEN_OPS_BIG(8, 8, false, 8, 8, false)
+
+const MemoryRegionOps ops_list_little_b_valid[] = {
+    NAME_OPS_LITTLE(1, 1,  true, 1, 1,  true),
+    NAME_OPS_LITTLE(1, 1,  true, 2, 1,  true),
+    NAME_OPS_LITTLE(1, 1,  true, 4, 1,  true),
+    NAME_OPS_LITTLE(1, 1,  true, 8, 1,  true),
+    NAME_OPS_LITTLE(1, 1,  true, 2, 2,  true),
+    NAME_OPS_LITTLE(1, 1,  true, 4, 2,  true),
+    NAME_OPS_LITTLE(1, 1,  true, 8, 2,  true),
+    NAME_OPS_LITTLE(1, 1,  true, 4, 4,  true),
+    NAME_OPS_LITTLE(1, 1,  true, 8, 4,  true),
+    NAME_OPS_LITTLE(1, 1,  true, 8, 8,  true),
+    NAME_OPS_LITTLE(1, 1,  true, 1, 1, false),
+    NAME_OPS_LITTLE(1, 1,  true, 2, 1, false),
+    NAME_OPS_LITTLE(1, 1,  true, 4, 1, false),
+    NAME_OPS_LITTLE(1, 1,  true, 8, 1, false),
+    NAME_OPS_LITTLE(1, 1,  true, 2, 2, false),
+    NAME_OPS_LITTLE(1, 1,  true, 4, 2, false),
+    NAME_OPS_LITTLE(1, 1,  true, 8, 2, false),
+    NAME_OPS_LITTLE(1, 1,  true, 4, 4, false),
+    NAME_OPS_LITTLE(1, 1,  true, 8, 4, false),
+    NAME_OPS_LITTLE(1, 1,  true, 8, 8, false),
+    NAME_OPS_LITTLE(2, 1,  true, 1, 1,  true),
+    NAME_OPS_LITTLE(2, 1,  true, 2, 1,  true),
+    NAME_OPS_LITTLE(2, 1,  true, 4, 1,  true),
+    NAME_OPS_LITTLE(2, 1,  true, 8, 1,  true),
+    NAME_OPS_LITTLE(2, 1,  true, 2, 2,  true),
+    NAME_OPS_LITTLE(2, 1,  true, 4, 2,  true),
+    NAME_OPS_LITTLE(2, 1,  true, 8, 2,  true),
+    NAME_OPS_LITTLE(2, 1,  true, 4, 4,  true),
+    NAME_OPS_LITTLE(2, 1,  true, 8, 4,  true),
+    NAME_OPS_LITTLE(2, 1,  true, 8, 8,  true),
+    NAME_OPS_LITTLE(2, 1,  true, 1, 1, false),
+    NAME_OPS_LITTLE(2, 1,  true, 2, 1, false),
+    NAME_OPS_LITTLE(2, 1,  true, 4, 1, false),
+    NAME_OPS_LITTLE(2, 1,  true, 8, 1, false),
+    NAME_OPS_LITTLE(2, 1,  true, 2, 2, false),
+    NAME_OPS_LITTLE(2, 1,  true, 4, 2, false),
+    NAME_OPS_LITTLE(2, 1,  true, 8, 2, false),
+    NAME_OPS_LITTLE(2, 1,  true, 4, 4, false),
+    NAME_OPS_LITTLE(2, 1,  true, 8, 4, false),
+    NAME_OPS_LITTLE(2, 1,  true, 8, 8, false),
+    NAME_OPS_LITTLE(4, 1,  true, 1, 1,  true),
+    NAME_OPS_LITTLE(4, 1,  true, 2, 1,  true),
+    NAME_OPS_LITTLE(4, 1,  true, 4, 1,  true),
+    NAME_OPS_LITTLE(4, 1,  true, 8, 1,  true),
+    NAME_OPS_LITTLE(4, 1,  true, 2, 2,  true),
+    NAME_OPS_LITTLE(4, 1,  true, 4, 2,  true),
+    NAME_OPS_LITTLE(4, 1,  true, 8, 2,  true),
+    NAME_OPS_LITTLE(4, 1,  true, 4, 4,  true),
+    NAME_OPS_LITTLE(4, 1,  true, 8, 4,  true),
+    NAME_OPS_LITTLE(4, 1,  true, 8, 8,  true),
+    NAME_OPS_LITTLE(4, 1,  true, 1, 1, false),
+    NAME_OPS_LITTLE(4, 1,  true, 2, 1, false),
+    NAME_OPS_LITTLE(4, 1,  true, 4, 1, false),
+    NAME_OPS_LITTLE(4, 1,  true, 8, 1, false),
+    NAME_OPS_LITTLE(4, 1,  true, 2, 2, false),
+    NAME_OPS_LITTLE(4, 1,  true, 4, 2, false),
+    NAME_OPS_LITTLE(4, 1,  true, 8, 2, false),
+    NAME_OPS_LITTLE(4, 1,  true, 4, 4, false),
+    NAME_OPS_LITTLE(4, 1,  true, 8, 4, false),
+    NAME_OPS_LITTLE(4, 1,  true, 8, 8, false),
+    NAME_OPS_LITTLE(8, 1,  true, 1, 1,  true),
+    NAME_OPS_LITTLE(8, 1,  true, 2, 1,  true),
+    NAME_OPS_LITTLE(8, 1,  true, 4, 1,  true),
+    NAME_OPS_LITTLE(8, 1,  true, 8, 1,  true),
+    NAME_OPS_LITTLE(8, 1,  true, 2, 2,  true),
+    NAME_OPS_LITTLE(8, 1,  true, 4, 2,  true),
+    NAME_OPS_LITTLE(8, 1,  true, 8, 2,  true),
+    NAME_OPS_LITTLE(8, 1,  true, 4, 4,  true),
+    NAME_OPS_LITTLE(8, 1,  true, 8, 4,  true),
+    NAME_OPS_LITTLE(8, 1,  true, 8, 8,  true),
+    NAME_OPS_LITTLE(8, 1,  true, 1, 1, false),
+    NAME_OPS_LITTLE(8, 1,  true, 2, 1, false),
+    NAME_OPS_LITTLE(8, 1,  true, 4, 1, false),
+    NAME_OPS_LITTLE(8, 1,  true, 8, 1, false),
+    NAME_OPS_LITTLE(8, 1,  true, 2, 2, false),
+    NAME_OPS_LITTLE(8, 1,  true, 4, 2, false),
+    NAME_OPS_LITTLE(8, 1,  true, 8, 2, false),
+    NAME_OPS_LITTLE(8, 1,  true, 4, 4, false),
+    NAME_OPS_LITTLE(8, 1,  true, 8, 4, false),
+    NAME_OPS_LITTLE(8, 1,  true, 8, 8, false),
+};
+
+const MemoryRegionOps ops_list_little_b_invalid[] = {
+    NAME_OPS_LITTLE(1, 1, false, 1, 1,  true),
+    NAME_OPS_LITTLE(1, 1, false, 2, 1,  true),
+    NAME_OPS_LITTLE(1, 1, false, 4, 1,  true),
+    NAME_OPS_LITTLE(1, 1, false, 8, 1,  true),
+    NAME_OPS_LITTLE(1, 1, false, 2, 2,  true),
+    NAME_OPS_LITTLE(1, 1, false, 4, 2,  true),
+    NAME_OPS_LITTLE(1, 1, false, 8, 2,  true),
+    NAME_OPS_LITTLE(1, 1, false, 4, 4,  true),
+    NAME_OPS_LITTLE(1, 1, false, 8, 4,  true),
+    NAME_OPS_LITTLE(1, 1, false, 8, 8,  true),
+    NAME_OPS_LITTLE(1, 1, false, 1, 1, false),
+    NAME_OPS_LITTLE(1, 1, false, 2, 1, false),
+    NAME_OPS_LITTLE(1, 1, false, 4, 1, false),
+    NAME_OPS_LITTLE(1, 1, false, 8, 1, false),
+    NAME_OPS_LITTLE(1, 1, false, 2, 2, false),
+    NAME_OPS_LITTLE(1, 1, false, 4, 2, false),
+    NAME_OPS_LITTLE(1, 1, false, 8, 2, false),
+    NAME_OPS_LITTLE(1, 1, false, 4, 4, false),
+    NAME_OPS_LITTLE(1, 1, false, 8, 4, false),
+    NAME_OPS_LITTLE(1, 1, false, 8, 8, false),
+    NAME_OPS_LITTLE(2, 1, false, 1, 1,  true),
+    NAME_OPS_LITTLE(2, 1, false, 2, 1,  true),
+    NAME_OPS_LITTLE(2, 1, false, 4, 1,  true),
+    NAME_OPS_LITTLE(2, 1, false, 8, 1,  true),
+    NAME_OPS_LITTLE(2, 1, false, 2, 2,  true),
+    NAME_OPS_LITTLE(2, 1, false, 4, 2,  true),
+    NAME_OPS_LITTLE(2, 1, false, 8, 2,  true),
+    NAME_OPS_LITTLE(2, 1, false, 4, 4,  true),
+    NAME_OPS_LITTLE(2, 1, false, 8, 4,  true),
+    NAME_OPS_LITTLE(2, 1, false, 8, 8,  true),
+    NAME_OPS_LITTLE(2, 1, false, 1, 1, false),
+    NAME_OPS_LITTLE(2, 1, false, 2, 1, false),
+    NAME_OPS_LITTLE(2, 1, false, 4, 1, false),
+    NAME_OPS_LITTLE(2, 1, false, 8, 1, false),
+    NAME_OPS_LITTLE(2, 1, false, 2, 2, false),
+    NAME_OPS_LITTLE(2, 1, false, 4, 2, false),
+    NAME_OPS_LITTLE(2, 1, false, 8, 2, false),
+    NAME_OPS_LITTLE(2, 1, false, 4, 4, false),
+    NAME_OPS_LITTLE(2, 1, false, 8, 4, false),
+    NAME_OPS_LITTLE(2, 1, false, 8, 8, false),
+    NAME_OPS_LITTLE(4, 1, false, 1, 1,  true),
+    NAME_OPS_LITTLE(4, 1, false, 2, 1,  true),
+    NAME_OPS_LITTLE(4, 1, false, 4, 1,  true),
+    NAME_OPS_LITTLE(4, 1, false, 8, 1,  true),
+    NAME_OPS_LITTLE(4, 1, false, 2, 2,  true),
+    NAME_OPS_LITTLE(4, 1, false, 4, 2,  true),
+    NAME_OPS_LITTLE(4, 1, false, 8, 2,  true),
+    NAME_OPS_LITTLE(4, 1, false, 4, 4,  true),
+    NAME_OPS_LITTLE(4, 1, false, 8, 4,  true),
+    NAME_OPS_LITTLE(4, 1, false, 8, 8,  true),
+    NAME_OPS_LITTLE(4, 1, false, 1, 1, false),
+    NAME_OPS_LITTLE(4, 1, false, 2, 1, false),
+    NAME_OPS_LITTLE(4, 1, false, 4, 1, false),
+    NAME_OPS_LITTLE(4, 1, false, 8, 1, false),
+    NAME_OPS_LITTLE(4, 1, false, 2, 2, false),
+    NAME_OPS_LITTLE(4, 1, false, 4, 2, false),
+    NAME_OPS_LITTLE(4, 1, false, 8, 2, false),
+    NAME_OPS_LITTLE(4, 1, false, 4, 4, false),
+    NAME_OPS_LITTLE(4, 1, false, 8, 4, false),
+    NAME_OPS_LITTLE(4, 1, false, 8, 8, false),
+    NAME_OPS_LITTLE(8, 1, false, 1, 1,  true),
+    NAME_OPS_LITTLE(8, 1, false, 2, 1,  true),
+    NAME_OPS_LITTLE(8, 1, false, 4, 1,  true),
+    NAME_OPS_LITTLE(8, 1, false, 8, 1,  true),
+    NAME_OPS_LITTLE(8, 1, false, 2, 2,  true),
+    NAME_OPS_LITTLE(8, 1, false, 4, 2,  true),
+    NAME_OPS_LITTLE(8, 1, false, 8, 2,  true),
+    NAME_OPS_LITTLE(8, 1, false, 4, 4,  true),
+    NAME_OPS_LITTLE(8, 1, false, 8, 4,  true),
+    NAME_OPS_LITTLE(8, 1, false, 8, 8,  true),
+    NAME_OPS_LITTLE(8, 1, false, 1, 1, false),
+    NAME_OPS_LITTLE(8, 1, false, 2, 1, false),
+    NAME_OPS_LITTLE(8, 1, false, 4, 1, false),
+    NAME_OPS_LITTLE(8, 1, false, 8, 1, false),
+    NAME_OPS_LITTLE(8, 1, false, 2, 2, false),
+    NAME_OPS_LITTLE(8, 1, false, 4, 2, false),
+    NAME_OPS_LITTLE(8, 1, false, 8, 2, false),
+    NAME_OPS_LITTLE(8, 1, false, 4, 4, false),
+    NAME_OPS_LITTLE(8, 1, false, 8, 4, false),
+    NAME_OPS_LITTLE(8, 1, false, 8, 8, false),
+};
+
+const MemoryRegionOps ops_list_little_w_valid[] = {
+    NAME_OPS_LITTLE(2, 2,  true, 1, 1,  true),
+    NAME_OPS_LITTLE(2, 2,  true, 2, 1,  true),
+    NAME_OPS_LITTLE(2, 2,  true, 4, 1,  true),
+    NAME_OPS_LITTLE(2, 2,  true, 8, 1,  true),
+    NAME_OPS_LITTLE(2, 2,  true, 2, 2,  true),
+    NAME_OPS_LITTLE(2, 2,  true, 4, 2,  true),
+    NAME_OPS_LITTLE(2, 2,  true, 8, 2,  true),
+    NAME_OPS_LITTLE(2, 2,  true, 4, 4,  true),
+    NAME_OPS_LITTLE(2, 2,  true, 8, 4,  true),
+    NAME_OPS_LITTLE(2, 2,  true, 8, 8,  true),
+    NAME_OPS_LITTLE(2, 2,  true, 1, 1, false),
+    NAME_OPS_LITTLE(2, 2,  true, 2, 1, false),
+    NAME_OPS_LITTLE(2, 2,  true, 4, 1, false),
+    NAME_OPS_LITTLE(2, 2,  true, 8, 1, false),
+    NAME_OPS_LITTLE(2, 2,  true, 2, 2, false),
+    NAME_OPS_LITTLE(2, 2,  true, 4, 2, false),
+    NAME_OPS_LITTLE(2, 2,  true, 8, 2, false),
+    NAME_OPS_LITTLE(2, 2,  true, 4, 4, false),
+    NAME_OPS_LITTLE(2, 2,  true, 8, 4, false),
+    NAME_OPS_LITTLE(2, 2,  true, 8, 8, false),
+    NAME_OPS_LITTLE(4, 2,  true, 1, 1,  true),
+    NAME_OPS_LITTLE(4, 2,  true, 2, 1,  true),
+    NAME_OPS_LITTLE(4, 2,  true, 4, 1,  true),
+    NAME_OPS_LITTLE(4, 2,  true, 8, 1,  true),
+    NAME_OPS_LITTLE(4, 2,  true, 2, 2,  true),
+    NAME_OPS_LITTLE(4, 2,  true, 4, 2,  true),
+    NAME_OPS_LITTLE(4, 2,  true, 8, 2,  true),
+    NAME_OPS_LITTLE(4, 2,  true, 4, 4,  true),
+    NAME_OPS_LITTLE(4, 2,  true, 8, 4,  true),
+    NAME_OPS_LITTLE(4, 2,  true, 8, 8,  true),
+    NAME_OPS_LITTLE(4, 2,  true, 1, 1, false),
+    NAME_OPS_LITTLE(4, 2,  true, 2, 1, false),
+    NAME_OPS_LITTLE(4, 2,  true, 4, 1, false),
+    NAME_OPS_LITTLE(4, 2,  true, 8, 1, false),
+    NAME_OPS_LITTLE(4, 2,  true, 2, 2, false),
+    NAME_OPS_LITTLE(4, 2,  true, 4, 2, false),
+    NAME_OPS_LITTLE(4, 2,  true, 8, 2, false),
+    NAME_OPS_LITTLE(4, 2,  true, 4, 4, false),
+    NAME_OPS_LITTLE(4, 2,  true, 8, 4, false),
+    NAME_OPS_LITTLE(4, 2,  true, 8, 8, false),
+    NAME_OPS_LITTLE(8, 2,  true, 1, 1,  true),
+    NAME_OPS_LITTLE(8, 2,  true, 2, 1,  true),
+    NAME_OPS_LITTLE(8, 2,  true, 4, 1,  true),
+    NAME_OPS_LITTLE(8, 2,  true, 8, 1,  true),
+    NAME_OPS_LITTLE(8, 2,  true, 2, 2,  true),
+    NAME_OPS_LITTLE(8, 2,  true, 4, 2,  true),
+    NAME_OPS_LITTLE(8, 2,  true, 8, 2,  true),
+    NAME_OPS_LITTLE(8, 2,  true, 4, 4,  true),
+    NAME_OPS_LITTLE(8, 2,  true, 8, 4,  true),
+    NAME_OPS_LITTLE(8, 2,  true, 8, 8,  true),
+    NAME_OPS_LITTLE(8, 2,  true, 1, 1, false),
+    NAME_OPS_LITTLE(8, 2,  true, 2, 1, false),
+    NAME_OPS_LITTLE(8, 2,  true, 4, 1, false),
+    NAME_OPS_LITTLE(8, 2,  true, 8, 1, false),
+    NAME_OPS_LITTLE(8, 2,  true, 2, 2, false),
+    NAME_OPS_LITTLE(8, 2,  true, 4, 2, false),
+    NAME_OPS_LITTLE(8, 2,  true, 8, 2, false),
+    NAME_OPS_LITTLE(8, 2,  true, 4, 4, false),
+    NAME_OPS_LITTLE(8, 2,  true, 8, 4, false),
+    NAME_OPS_LITTLE(8, 2,  true, 8, 8, false),
+};
+
+const MemoryRegionOps ops_list_little_w_invalid[] = {
+    NAME_OPS_LITTLE(2, 2, false, 1, 1,  true),
+    NAME_OPS_LITTLE(2, 2, false, 2, 1,  true),
+    NAME_OPS_LITTLE(2, 2, false, 4, 1,  true),
+    NAME_OPS_LITTLE(2, 2, false, 8, 1,  true),
+    NAME_OPS_LITTLE(2, 2, false, 2, 2,  true),
+    NAME_OPS_LITTLE(2, 2, false, 4, 2,  true),
+    NAME_OPS_LITTLE(2, 2, false, 8, 2,  true),
+    NAME_OPS_LITTLE(2, 2, false, 4, 4,  true),
+    NAME_OPS_LITTLE(2, 2, false, 8, 4,  true),
+    NAME_OPS_LITTLE(2, 2, false, 8, 8,  true),
+    NAME_OPS_LITTLE(2, 2, false, 1, 1, false),
+    NAME_OPS_LITTLE(2, 2, false, 2, 1, false),
+    NAME_OPS_LITTLE(2, 2, false, 4, 1, false),
+    NAME_OPS_LITTLE(2, 2, false, 8, 1, false),
+    NAME_OPS_LITTLE(2, 2, false, 2, 2, false),
+    NAME_OPS_LITTLE(2, 2, false, 4, 2, false),
+    NAME_OPS_LITTLE(2, 2, false, 8, 2, false),
+    NAME_OPS_LITTLE(2, 2, false, 4, 4, false),
+    NAME_OPS_LITTLE(2, 2, false, 8, 4, false),
+    NAME_OPS_LITTLE(2, 2, false, 8, 8, false),
+    NAME_OPS_LITTLE(4, 2, false, 1, 1,  true),
+    NAME_OPS_LITTLE(4, 2, false, 2, 1,  true),
+    NAME_OPS_LITTLE(4, 2, false, 4, 1,  true),
+    NAME_OPS_LITTLE(4, 2, false, 8, 1,  true),
+    NAME_OPS_LITTLE(4, 2, false, 2, 2,  true),
+    NAME_OPS_LITTLE(4, 2, false, 4, 2,  true),
+    NAME_OPS_LITTLE(4, 2, false, 8, 2,  true),
+    NAME_OPS_LITTLE(4, 2, false, 4, 4,  true),
+    NAME_OPS_LITTLE(4, 2, false, 8, 4,  true),
+    NAME_OPS_LITTLE(4, 2, false, 8, 8,  true),
+    NAME_OPS_LITTLE(4, 2, false, 1, 1, false),
+    NAME_OPS_LITTLE(4, 2, false, 2, 1, false),
+    NAME_OPS_LITTLE(4, 2, false, 4, 1, false),
+    NAME_OPS_LITTLE(4, 2, false, 8, 1, false),
+    NAME_OPS_LITTLE(4, 2, false, 2, 2, false),
+    NAME_OPS_LITTLE(4, 2, false, 4, 2, false),
+    NAME_OPS_LITTLE(4, 2, false, 8, 2, false),
+    NAME_OPS_LITTLE(4, 2, false, 4, 4, false),
+    NAME_OPS_LITTLE(4, 2, false, 8, 4, false),
+    NAME_OPS_LITTLE(4, 2, false, 8, 8, false),
+    NAME_OPS_LITTLE(8, 2, false, 1, 1,  true),
+    NAME_OPS_LITTLE(8, 2, false, 2, 1,  true),
+    NAME_OPS_LITTLE(8, 2, false, 4, 1,  true),
+    NAME_OPS_LITTLE(8, 2, false, 8, 1,  true),
+    NAME_OPS_LITTLE(8, 2, false, 2, 2,  true),
+    NAME_OPS_LITTLE(8, 2, false, 4, 2,  true),
+    NAME_OPS_LITTLE(8, 2, false, 8, 2,  true),
+    NAME_OPS_LITTLE(8, 2, false, 4, 4,  true),
+    NAME_OPS_LITTLE(8, 2, false, 8, 4,  true),
+    NAME_OPS_LITTLE(8, 2, false, 8, 8,  true),
+    NAME_OPS_LITTLE(8, 2, false, 1, 1, false),
+    NAME_OPS_LITTLE(8, 2, false, 2, 1, false),
+    NAME_OPS_LITTLE(8, 2, false, 4, 1, false),
+    NAME_OPS_LITTLE(8, 2, false, 8, 1, false),
+    NAME_OPS_LITTLE(8, 2, false, 2, 2, false),
+    NAME_OPS_LITTLE(8, 2, false, 4, 2, false),
+    NAME_OPS_LITTLE(8, 2, false, 8, 2, false),
+    NAME_OPS_LITTLE(8, 2, false, 4, 4, false),
+    NAME_OPS_LITTLE(8, 2, false, 8, 4, false),
+    NAME_OPS_LITTLE(8, 2, false, 8, 8, false),
+};
+
+const MemoryRegionOps ops_list_little_l_valid[] = {
+    NAME_OPS_LITTLE(4, 4,  true, 1, 1,  true),
+    NAME_OPS_LITTLE(4, 4,  true, 2, 1,  true),
+    NAME_OPS_LITTLE(4, 4,  true, 4, 1,  true),
+    NAME_OPS_LITTLE(4, 4,  true, 8, 1,  true),
+    NAME_OPS_LITTLE(4, 4,  true, 2, 2,  true),
+    NAME_OPS_LITTLE(4, 4,  true, 4, 2,  true),
+    NAME_OPS_LITTLE(4, 4,  true, 8, 2,  true),
+    NAME_OPS_LITTLE(4, 4,  true, 4, 4,  true),
+    NAME_OPS_LITTLE(4, 4,  true, 8, 4,  true),
+    NAME_OPS_LITTLE(4, 4,  true, 8, 8,  true),
+    NAME_OPS_LITTLE(4, 4,  true, 1, 1, false),
+    NAME_OPS_LITTLE(4, 4,  true, 2, 1, false),
+    NAME_OPS_LITTLE(4, 4,  true, 4, 1, false),
+    NAME_OPS_LITTLE(4, 4,  true, 8, 1, false),
+    NAME_OPS_LITTLE(4, 4,  true, 2, 2, false),
+    NAME_OPS_LITTLE(4, 4,  true, 4, 2, false),
+    NAME_OPS_LITTLE(4, 4,  true, 8, 2, false),
+    NAME_OPS_LITTLE(4, 4,  true, 4, 4, false),
+    NAME_OPS_LITTLE(4, 4,  true, 8, 4, false),
+    NAME_OPS_LITTLE(4, 4,  true, 8, 8, false),
+    NAME_OPS_LITTLE(8, 4,  true, 1, 1,  true),
+    NAME_OPS_LITTLE(8, 4,  true, 2, 1,  true),
+    NAME_OPS_LITTLE(8, 4,  true, 4, 1,  true),
+    NAME_OPS_LITTLE(8, 4,  true, 8, 1,  true),
+    NAME_OPS_LITTLE(8, 4,  true, 2, 2,  true),
+    NAME_OPS_LITTLE(8, 4,  true, 4, 2,  true),
+    NAME_OPS_LITTLE(8, 4,  true, 8, 2,  true),
+    NAME_OPS_LITTLE(8, 4,  true, 4, 4,  true),
+    NAME_OPS_LITTLE(8, 4,  true, 8, 4,  true),
+    NAME_OPS_LITTLE(8, 4,  true, 8, 8,  true),
+    NAME_OPS_LITTLE(8, 4,  true, 1, 1, false),
+    NAME_OPS_LITTLE(8, 4,  true, 2, 1, false),
+    NAME_OPS_LITTLE(8, 4,  true, 4, 1, false),
+    NAME_OPS_LITTLE(8, 4,  true, 8, 1, false),
+    NAME_OPS_LITTLE(8, 4,  true, 2, 2, false),
+    NAME_OPS_LITTLE(8, 4,  true, 4, 2, false),
+    NAME_OPS_LITTLE(8, 4,  true, 8, 2, false),
+    NAME_OPS_LITTLE(8, 4,  true, 4, 4, false),
+    NAME_OPS_LITTLE(8, 4,  true, 8, 4, false),
+    NAME_OPS_LITTLE(8, 4,  true, 8, 8, false),
+};
+
+const MemoryRegionOps ops_list_little_l_invalid[] = {
+    NAME_OPS_LITTLE(4, 4, false, 1, 1,  true),
+    NAME_OPS_LITTLE(4, 4, false, 2, 1,  true),
+    NAME_OPS_LITTLE(4, 4, false, 4, 1,  true),
+    NAME_OPS_LITTLE(4, 4, false, 8, 1,  true),
+    NAME_OPS_LITTLE(4, 4, false, 2, 2,  true),
+    NAME_OPS_LITTLE(4, 4, false, 4, 2,  true),
+    NAME_OPS_LITTLE(4, 4, false, 8, 2,  true),
+    NAME_OPS_LITTLE(4, 4, false, 4, 4,  true),
+    NAME_OPS_LITTLE(4, 4, false, 8, 4,  true),
+    NAME_OPS_LITTLE(4, 4, false, 8, 8,  true),
+    NAME_OPS_LITTLE(4, 4, false, 1, 1, false),
+    NAME_OPS_LITTLE(4, 4, false, 2, 1, false),
+    NAME_OPS_LITTLE(4, 4, false, 4, 1, false),
+    NAME_OPS_LITTLE(4, 4, false, 8, 1, false),
+    NAME_OPS_LITTLE(4, 4, false, 2, 2, false),
+    NAME_OPS_LITTLE(4, 4, false, 4, 2, false),
+    NAME_OPS_LITTLE(4, 4, false, 8, 2, false),
+    NAME_OPS_LITTLE(4, 4, false, 4, 4, false),
+    NAME_OPS_LITTLE(4, 4, false, 8, 4, false),
+    NAME_OPS_LITTLE(4, 4, false, 8, 8, false),
+    NAME_OPS_LITTLE(8, 4, false, 1, 1,  true),
+    NAME_OPS_LITTLE(8, 4, false, 2, 1,  true),
+    NAME_OPS_LITTLE(8, 4, false, 4, 1,  true),
+    NAME_OPS_LITTLE(8, 4, false, 8, 1,  true),
+    NAME_OPS_LITTLE(8, 4, false, 2, 2,  true),
+    NAME_OPS_LITTLE(8, 4, false, 4, 2,  true),
+    NAME_OPS_LITTLE(8, 4, false, 8, 2,  true),
+    NAME_OPS_LITTLE(8, 4, false, 4, 4,  true),
+    NAME_OPS_LITTLE(8, 4, false, 8, 4,  true),
+    NAME_OPS_LITTLE(8, 4, false, 8, 8,  true),
+    NAME_OPS_LITTLE(8, 4, false, 1, 1, false),
+    NAME_OPS_LITTLE(8, 4, false, 2, 1, false),
+    NAME_OPS_LITTLE(8, 4, false, 4, 1, false),
+    NAME_OPS_LITTLE(8, 4, false, 8, 1, false),
+    NAME_OPS_LITTLE(8, 4, false, 2, 2, false),
+    NAME_OPS_LITTLE(8, 4, false, 4, 2, false),
+    NAME_OPS_LITTLE(8, 4, false, 8, 2, false),
+    NAME_OPS_LITTLE(8, 4, false, 4, 4, false),
+    NAME_OPS_LITTLE(8, 4, false, 8, 4, false),
+    NAME_OPS_LITTLE(8, 4, false, 8, 8, false),
+};
+
+const MemoryRegionOps ops_list_little_q_valid[] = {
+    NAME_OPS_LITTLE(8, 8,  true, 1, 1,  true),
+    NAME_OPS_LITTLE(8, 8,  true, 2, 1,  true),
+    NAME_OPS_LITTLE(8, 8,  true, 4, 1,  true),
+    NAME_OPS_LITTLE(8, 8,  true, 8, 1,  true),
+    NAME_OPS_LITTLE(8, 8,  true, 2, 2,  true),
+    NAME_OPS_LITTLE(8, 8,  true, 4, 2,  true),
+    NAME_OPS_LITTLE(8, 8,  true, 8, 2,  true),
+    NAME_OPS_LITTLE(8, 8,  true, 4, 4,  true),
+    NAME_OPS_LITTLE(8, 8,  true, 8, 4,  true),
+    NAME_OPS_LITTLE(8, 8,  true, 8, 8,  true),
+    NAME_OPS_LITTLE(8, 8,  true, 1, 1, false),
+    NAME_OPS_LITTLE(8, 8,  true, 2, 1, false),
+    NAME_OPS_LITTLE(8, 8,  true, 4, 1, false),
+    NAME_OPS_LITTLE(8, 8,  true, 8, 1, false),
+    NAME_OPS_LITTLE(8, 8,  true, 2, 2, false),
+    NAME_OPS_LITTLE(8, 8,  true, 4, 2, false),
+    NAME_OPS_LITTLE(8, 8,  true, 8, 2, false),
+    NAME_OPS_LITTLE(8, 8,  true, 4, 4, false),
+    NAME_OPS_LITTLE(8, 8,  true, 8, 4, false),
+    NAME_OPS_LITTLE(8, 8,  true, 8, 8, false),
+};
+
+const MemoryRegionOps ops_list_little_q_invalid[] = {
+    NAME_OPS_LITTLE(8, 8, false, 1, 1,  true),
+    NAME_OPS_LITTLE(8, 8, false, 2, 1,  true),
+    NAME_OPS_LITTLE(8, 8, false, 4, 1,  true),
+    NAME_OPS_LITTLE(8, 8, false, 8, 1,  true),
+    NAME_OPS_LITTLE(8, 8, false, 2, 2,  true),
+    NAME_OPS_LITTLE(8, 8, false, 4, 2,  true),
+    NAME_OPS_LITTLE(8, 8, false, 8, 2,  true),
+    NAME_OPS_LITTLE(8, 8, false, 4, 4,  true),
+    NAME_OPS_LITTLE(8, 8, false, 8, 4,  true),
+    NAME_OPS_LITTLE(8, 8, false, 8, 8,  true),
+    NAME_OPS_LITTLE(8, 8, false, 1, 1, false),
+    NAME_OPS_LITTLE(8, 8, false, 2, 1, false),
+    NAME_OPS_LITTLE(8, 8, false, 4, 1, false),
+    NAME_OPS_LITTLE(8, 8, false, 8, 1, false),
+    NAME_OPS_LITTLE(8, 8, false, 2, 2, false),
+    NAME_OPS_LITTLE(8, 8, false, 4, 2, false),
+    NAME_OPS_LITTLE(8, 8, false, 8, 2, false),
+    NAME_OPS_LITTLE(8, 8, false, 4, 4, false),
+    NAME_OPS_LITTLE(8, 8, false, 8, 4, false),
+    NAME_OPS_LITTLE(8, 8, false, 8, 8, false),
+};
+
+const MemoryRegionOps ops_list_big_b_valid[] = {
+    NAME_OPS_BIG(1, 1,  true, 1, 1,  true),
+    NAME_OPS_BIG(1, 1,  true, 2, 1,  true),
+    NAME_OPS_BIG(1, 1,  true, 4, 1,  true),
+    NAME_OPS_BIG(1, 1,  true, 8, 1,  true),
+    NAME_OPS_BIG(1, 1,  true, 2, 2,  true),
+    NAME_OPS_BIG(1, 1,  true, 4, 2,  true),
+    NAME_OPS_BIG(1, 1,  true, 8, 2,  true),
+    NAME_OPS_BIG(1, 1,  true, 4, 4,  true),
+    NAME_OPS_BIG(1, 1,  true, 8, 4,  true),
+    NAME_OPS_BIG(1, 1,  true, 8, 8,  true),
+    NAME_OPS_BIG(1, 1,  true, 1, 1, false),
+    NAME_OPS_BIG(1, 1,  true, 2, 1, false),
+    NAME_OPS_BIG(1, 1,  true, 4, 1, false),
+    NAME_OPS_BIG(1, 1,  true, 8, 1, false),
+    NAME_OPS_BIG(1, 1,  true, 2, 2, false),
+    NAME_OPS_BIG(1, 1,  true, 4, 2, false),
+    NAME_OPS_BIG(1, 1,  true, 8, 2, false),
+    NAME_OPS_BIG(1, 1,  true, 4, 4, false),
+    NAME_OPS_BIG(1, 1,  true, 8, 4, false),
+    NAME_OPS_BIG(1, 1,  true, 8, 8, false),
+    NAME_OPS_BIG(2, 1,  true, 1, 1,  true),
+    NAME_OPS_BIG(2, 1,  true, 2, 1,  true),
+    NAME_OPS_BIG(2, 1,  true, 4, 1,  true),
+    NAME_OPS_BIG(2, 1,  true, 8, 1,  true),
+    NAME_OPS_BIG(2, 1,  true, 2, 2,  true),
+    NAME_OPS_BIG(2, 1,  true, 4, 2,  true),
+    NAME_OPS_BIG(2, 1,  true, 8, 2,  true),
+    NAME_OPS_BIG(2, 1,  true, 4, 4,  true),
+    NAME_OPS_BIG(2, 1,  true, 8, 4,  true),
+    NAME_OPS_BIG(2, 1,  true, 8, 8,  true),
+    NAME_OPS_BIG(2, 1,  true, 1, 1, false),
+    NAME_OPS_BIG(2, 1,  true, 2, 1, false),
+    NAME_OPS_BIG(2, 1,  true, 4, 1, false),
+    NAME_OPS_BIG(2, 1,  true, 8, 1, false),
+    NAME_OPS_BIG(2, 1,  true, 2, 2, false),
+    NAME_OPS_BIG(2, 1,  true, 4, 2, false),
+    NAME_OPS_BIG(2, 1,  true, 8, 2, false),
+    NAME_OPS_BIG(2, 1,  true, 4, 4, false),
+    NAME_OPS_BIG(2, 1,  true, 8, 4, false),
+    NAME_OPS_BIG(2, 1,  true, 8, 8, false),
+    NAME_OPS_BIG(4, 1,  true, 1, 1,  true),
+    NAME_OPS_BIG(4, 1,  true, 2, 1,  true),
+    NAME_OPS_BIG(4, 1,  true, 4, 1,  true),
+    NAME_OPS_BIG(4, 1,  true, 8, 1,  true),
+    NAME_OPS_BIG(4, 1,  true, 2, 2,  true),
+    NAME_OPS_BIG(4, 1,  true, 4, 2,  true),
+    NAME_OPS_BIG(4, 1,  true, 8, 2,  true),
+    NAME_OPS_BIG(4, 1,  true, 4, 4,  true),
+    NAME_OPS_BIG(4, 1,  true, 8, 4,  true),
+    NAME_OPS_BIG(4, 1,  true, 8, 8,  true),
+    NAME_OPS_BIG(4, 1,  true, 1, 1, false),
+    NAME_OPS_BIG(4, 1,  true, 2, 1, false),
+    NAME_OPS_BIG(4, 1,  true, 4, 1, false),
+    NAME_OPS_BIG(4, 1,  true, 8, 1, false),
+    NAME_OPS_BIG(4, 1,  true, 2, 2, false),
+    NAME_OPS_BIG(4, 1,  true, 4, 2, false),
+    NAME_OPS_BIG(4, 1,  true, 8, 2, false),
+    NAME_OPS_BIG(4, 1,  true, 4, 4, false),
+    NAME_OPS_BIG(4, 1,  true, 8, 4, false),
+    NAME_OPS_BIG(4, 1,  true, 8, 8, false),
+    NAME_OPS_BIG(8, 1,  true, 1, 1,  true),
+    NAME_OPS_BIG(8, 1,  true, 2, 1,  true),
+    NAME_OPS_BIG(8, 1,  true, 4, 1,  true),
+    NAME_OPS_BIG(8, 1,  true, 8, 1,  true),
+    NAME_OPS_BIG(8, 1,  true, 2, 2,  true),
+    NAME_OPS_BIG(8, 1,  true, 4, 2,  true),
+    NAME_OPS_BIG(8, 1,  true, 8, 2,  true),
+    NAME_OPS_BIG(8, 1,  true, 4, 4,  true),
+    NAME_OPS_BIG(8, 1,  true, 8, 4,  true),
+    NAME_OPS_BIG(8, 1,  true, 8, 8,  true),
+    NAME_OPS_BIG(8, 1,  true, 1, 1, false),
+    NAME_OPS_BIG(8, 1,  true, 2, 1, false),
+    NAME_OPS_BIG(8, 1,  true, 4, 1, false),
+    NAME_OPS_BIG(8, 1,  true, 8, 1, false),
+    NAME_OPS_BIG(8, 1,  true, 2, 2, false),
+    NAME_OPS_BIG(8, 1,  true, 4, 2, false),
+    NAME_OPS_BIG(8, 1,  true, 8, 2, false),
+    NAME_OPS_BIG(8, 1,  true, 4, 4, false),
+    NAME_OPS_BIG(8, 1,  true, 8, 4, false),
+    NAME_OPS_BIG(8, 1,  true, 8, 8, false),
+};
+
+const MemoryRegionOps ops_list_big_b_invalid[] = {
+    NAME_OPS_BIG(1, 1, false, 1, 1,  true),
+    NAME_OPS_BIG(1, 1, false, 2, 1,  true),
+    NAME_OPS_BIG(1, 1, false, 4, 1,  true),
+    NAME_OPS_BIG(1, 1, false, 8, 1,  true),
+    NAME_OPS_BIG(1, 1, false, 2, 2,  true),
+    NAME_OPS_BIG(1, 1, false, 4, 2,  true),
+    NAME_OPS_BIG(1, 1, false, 8, 2,  true),
+    NAME_OPS_BIG(1, 1, false, 4, 4,  true),
+    NAME_OPS_BIG(1, 1, false, 8, 4,  true),
+    NAME_OPS_BIG(1, 1, false, 8, 8,  true),
+    NAME_OPS_BIG(1, 1, false, 1, 1, false),
+    NAME_OPS_BIG(1, 1, false, 2, 1, false),
+    NAME_OPS_BIG(1, 1, false, 4, 1, false),
+    NAME_OPS_BIG(1, 1, false, 8, 1, false),
+    NAME_OPS_BIG(1, 1, false, 2, 2, false),
+    NAME_OPS_BIG(1, 1, false, 4, 2, false),
+    NAME_OPS_BIG(1, 1, false, 8, 2, false),
+    NAME_OPS_BIG(1, 1, false, 4, 4, false),
+    NAME_OPS_BIG(1, 1, false, 8, 4, false),
+    NAME_OPS_BIG(1, 1, false, 8, 8, false),
+    NAME_OPS_BIG(2, 1, false, 1, 1,  true),
+    NAME_OPS_BIG(2, 1, false, 2, 1,  true),
+    NAME_OPS_BIG(2, 1, false, 4, 1,  true),
+    NAME_OPS_BIG(2, 1, false, 8, 1,  true),
+    NAME_OPS_BIG(2, 1, false, 2, 2,  true),
+    NAME_OPS_BIG(2, 1, false, 4, 2,  true),
+    NAME_OPS_BIG(2, 1, false, 8, 2,  true),
+    NAME_OPS_BIG(2, 1, false, 4, 4,  true),
+    NAME_OPS_BIG(2, 1, false, 8, 4,  true),
+    NAME_OPS_BIG(2, 1, false, 8, 8,  true),
+    NAME_OPS_BIG(2, 1, false, 1, 1, false),
+    NAME_OPS_BIG(2, 1, false, 2, 1, false),
+    NAME_OPS_BIG(2, 1, false, 4, 1, false),
+    NAME_OPS_BIG(2, 1, false, 8, 1, false),
+    NAME_OPS_BIG(2, 1, false, 2, 2, false),
+    NAME_OPS_BIG(2, 1, false, 4, 2, false),
+    NAME_OPS_BIG(2, 1, false, 8, 2, false),
+    NAME_OPS_BIG(2, 1, false, 4, 4, false),
+    NAME_OPS_BIG(2, 1, false, 8, 4, false),
+    NAME_OPS_BIG(2, 1, false, 8, 8, false),
+    NAME_OPS_BIG(4, 1, false, 1, 1,  true),
+    NAME_OPS_BIG(4, 1, false, 2, 1,  true),
+    NAME_OPS_BIG(4, 1, false, 4, 1,  true),
+    NAME_OPS_BIG(4, 1, false, 8, 1,  true),
+    NAME_OPS_BIG(4, 1, false, 2, 2,  true),
+    NAME_OPS_BIG(4, 1, false, 4, 2,  true),
+    NAME_OPS_BIG(4, 1, false, 8, 2,  true),
+    NAME_OPS_BIG(4, 1, false, 4, 4,  true),
+    NAME_OPS_BIG(4, 1, false, 8, 4,  true),
+    NAME_OPS_BIG(4, 1, false, 8, 8,  true),
+    NAME_OPS_BIG(4, 1, false, 1, 1, false),
+    NAME_OPS_BIG(4, 1, false, 2, 1, false),
+    NAME_OPS_BIG(4, 1, false, 4, 1, false),
+    NAME_OPS_BIG(4, 1, false, 8, 1, false),
+    NAME_OPS_BIG(4, 1, false, 2, 2, false),
+    NAME_OPS_BIG(4, 1, false, 4, 2, false),
+    NAME_OPS_BIG(4, 1, false, 8, 2, false),
+    NAME_OPS_BIG(4, 1, false, 4, 4, false),
+    NAME_OPS_BIG(4, 1, false, 8, 4, false),
+    NAME_OPS_BIG(4, 1, false, 8, 8, false),
+    NAME_OPS_BIG(8, 1, false, 1, 1,  true),
+    NAME_OPS_BIG(8, 1, false, 2, 1,  true),
+    NAME_OPS_BIG(8, 1, false, 4, 1,  true),
+    NAME_OPS_BIG(8, 1, false, 8, 1,  true),
+    NAME_OPS_BIG(8, 1, false, 2, 2,  true),
+    NAME_OPS_BIG(8, 1, false, 4, 2,  true),
+    NAME_OPS_BIG(8, 1, false, 8, 2,  true),
+    NAME_OPS_BIG(8, 1, false, 4, 4,  true),
+    NAME_OPS_BIG(8, 1, false, 8, 4,  true),
+    NAME_OPS_BIG(8, 1, false, 8, 8,  true),
+    NAME_OPS_BIG(8, 1, false, 1, 1, false),
+    NAME_OPS_BIG(8, 1, false, 2, 1, false),
+    NAME_OPS_BIG(8, 1, false, 4, 1, false),
+    NAME_OPS_BIG(8, 1, false, 8, 1, false),
+    NAME_OPS_BIG(8, 1, false, 2, 2, false),
+    NAME_OPS_BIG(8, 1, false, 4, 2, false),
+    NAME_OPS_BIG(8, 1, false, 8, 2, false),
+    NAME_OPS_BIG(8, 1, false, 4, 4, false),
+    NAME_OPS_BIG(8, 1, false, 8, 4, false),
+    NAME_OPS_BIG(8, 1, false, 8, 8, false),
+};
+
+const MemoryRegionOps ops_list_big_w_valid[] = {
+    NAME_OPS_BIG(2, 2,  true, 1, 1,  true),
+    NAME_OPS_BIG(2, 2,  true, 2, 1,  true),
+    NAME_OPS_BIG(2, 2,  true, 4, 1,  true),
+    NAME_OPS_BIG(2, 2,  true, 8, 1,  true),
+    NAME_OPS_BIG(2, 2,  true, 2, 2,  true),
+    NAME_OPS_BIG(2, 2,  true, 4, 2,  true),
+    NAME_OPS_BIG(2, 2,  true, 8, 2,  true),
+    NAME_OPS_BIG(2, 2,  true, 4, 4,  true),
+    NAME_OPS_BIG(2, 2,  true, 8, 4,  true),
+    NAME_OPS_BIG(2, 2,  true, 8, 8,  true),
+    NAME_OPS_BIG(2, 2,  true, 1, 1, false),
+    NAME_OPS_BIG(2, 2,  true, 2, 1, false),
+    NAME_OPS_BIG(2, 2,  true, 4, 1, false),
+    NAME_OPS_BIG(2, 2,  true, 8, 1, false),
+    NAME_OPS_BIG(2, 2,  true, 2, 2, false),
+    NAME_OPS_BIG(2, 2,  true, 4, 2, false),
+    NAME_OPS_BIG(2, 2,  true, 8, 2, false),
+    NAME_OPS_BIG(2, 2,  true, 4, 4, false),
+    NAME_OPS_BIG(2, 2,  true, 8, 4, false),
+    NAME_OPS_BIG(2, 2,  true, 8, 8, false),
+    NAME_OPS_BIG(4, 2,  true, 1, 1,  true),
+    NAME_OPS_BIG(4, 2,  true, 2, 1,  true),
+    NAME_OPS_BIG(4, 2,  true, 4, 1,  true),
+    NAME_OPS_BIG(4, 2,  true, 8, 1,  true),
+    NAME_OPS_BIG(4, 2,  true, 2, 2,  true),
+    NAME_OPS_BIG(4, 2,  true, 4, 2,  true),
+    NAME_OPS_BIG(4, 2,  true, 8, 2,  true),
+    NAME_OPS_BIG(4, 2,  true, 4, 4,  true),
+    NAME_OPS_BIG(4, 2,  true, 8, 4,  true),
+    NAME_OPS_BIG(4, 2,  true, 8, 8,  true),
+    NAME_OPS_BIG(4, 2,  true, 1, 1, false),
+    NAME_OPS_BIG(4, 2,  true, 2, 1, false),
+    NAME_OPS_BIG(4, 2,  true, 4, 1, false),
+    NAME_OPS_BIG(4, 2,  true, 8, 1, false),
+    NAME_OPS_BIG(4, 2,  true, 2, 2, false),
+    NAME_OPS_BIG(4, 2,  true, 4, 2, false),
+    NAME_OPS_BIG(4, 2,  true, 8, 2, false),
+    NAME_OPS_BIG(4, 2,  true, 4, 4, false),
+    NAME_OPS_BIG(4, 2,  true, 8, 4, false),
+    NAME_OPS_BIG(4, 2,  true, 8, 8, false),
+    NAME_OPS_BIG(8, 2,  true, 1, 1,  true),
+    NAME_OPS_BIG(8, 2,  true, 2, 1,  true),
+    NAME_OPS_BIG(8, 2,  true, 4, 1,  true),
+    NAME_OPS_BIG(8, 2,  true, 8, 1,  true),
+    NAME_OPS_BIG(8, 2,  true, 2, 2,  true),
+    NAME_OPS_BIG(8, 2,  true, 4, 2,  true),
+    NAME_OPS_BIG(8, 2,  true, 8, 2,  true),
+    NAME_OPS_BIG(8, 2,  true, 4, 4,  true),
+    NAME_OPS_BIG(8, 2,  true, 8, 4,  true),
+    NAME_OPS_BIG(8, 2,  true, 8, 8,  true),
+    NAME_OPS_BIG(8, 2,  true, 1, 1, false),
+    NAME_OPS_BIG(8, 2,  true, 2, 1, false),
+    NAME_OPS_BIG(8, 2,  true, 4, 1, false),
+    NAME_OPS_BIG(8, 2,  true, 8, 1, false),
+    NAME_OPS_BIG(8, 2,  true, 2, 2, false),
+    NAME_OPS_BIG(8, 2,  true, 4, 2, false),
+    NAME_OPS_BIG(8, 2,  true, 8, 2, false),
+    NAME_OPS_BIG(8, 2,  true, 4, 4, false),
+    NAME_OPS_BIG(8, 2,  true, 8, 4, false),
+    NAME_OPS_BIG(8, 2,  true, 8, 8, false),
+};
+
+const MemoryRegionOps ops_list_big_w_invalid[] = {
+    NAME_OPS_BIG(2, 2, false, 1, 1,  true),
+    NAME_OPS_BIG(2, 2, false, 2, 1,  true),
+    NAME_OPS_BIG(2, 2, false, 4, 1,  true),
+    NAME_OPS_BIG(2, 2, false, 8, 1,  true),
+    NAME_OPS_BIG(2, 2, false, 2, 2,  true),
+    NAME_OPS_BIG(2, 2, false, 4, 2,  true),
+    NAME_OPS_BIG(2, 2, false, 8, 2,  true),
+    NAME_OPS_BIG(2, 2, false, 4, 4,  true),
+    NAME_OPS_BIG(2, 2, false, 8, 4,  true),
+    NAME_OPS_BIG(2, 2, false, 8, 8,  true),
+    NAME_OPS_BIG(2, 2, false, 1, 1, false),
+    NAME_OPS_BIG(2, 2, false, 2, 1, false),
+    NAME_OPS_BIG(2, 2, false, 4, 1, false),
+    NAME_OPS_BIG(2, 2, false, 8, 1, false),
+    NAME_OPS_BIG(2, 2, false, 2, 2, false),
+    NAME_OPS_BIG(2, 2, false, 4, 2, false),
+    NAME_OPS_BIG(2, 2, false, 8, 2, false),
+    NAME_OPS_BIG(2, 2, false, 4, 4, false),
+    NAME_OPS_BIG(2, 2, false, 8, 4, false),
+    NAME_OPS_BIG(2, 2, false, 8, 8, false),
+    NAME_OPS_BIG(4, 2, false, 1, 1,  true),
+    NAME_OPS_BIG(4, 2, false, 2, 1,  true),
+    NAME_OPS_BIG(4, 2, false, 4, 1,  true),
+    NAME_OPS_BIG(4, 2, false, 8, 1,  true),
+    NAME_OPS_BIG(4, 2, false, 2, 2,  true),
+    NAME_OPS_BIG(4, 2, false, 4, 2,  true),
+    NAME_OPS_BIG(4, 2, false, 8, 2,  true),
+    NAME_OPS_BIG(4, 2, false, 4, 4,  true),
+    NAME_OPS_BIG(4, 2, false, 8, 4,  true),
+    NAME_OPS_BIG(4, 2, false, 8, 8,  true),
+    NAME_OPS_BIG(4, 2, false, 1, 1, false),
+    NAME_OPS_BIG(4, 2, false, 2, 1, false),
+    NAME_OPS_BIG(4, 2, false, 4, 1, false),
+    NAME_OPS_BIG(4, 2, false, 8, 1, false),
+    NAME_OPS_BIG(4, 2, false, 2, 2, false),
+    NAME_OPS_BIG(4, 2, false, 4, 2, false),
+    NAME_OPS_BIG(4, 2, false, 8, 2, false),
+    NAME_OPS_BIG(4, 2, false, 4, 4, false),
+    NAME_OPS_BIG(4, 2, false, 8, 4, false),
+    NAME_OPS_BIG(4, 2, false, 8, 8, false),
+    NAME_OPS_BIG(8, 2, false, 1, 1,  true),
+    NAME_OPS_BIG(8, 2, false, 2, 1,  true),
+    NAME_OPS_BIG(8, 2, false, 4, 1,  true),
+    NAME_OPS_BIG(8, 2, false, 8, 1,  true),
+    NAME_OPS_BIG(8, 2, false, 2, 2,  true),
+    NAME_OPS_BIG(8, 2, false, 4, 2,  true),
+    NAME_OPS_BIG(8, 2, false, 8, 2,  true),
+    NAME_OPS_BIG(8, 2, false, 4, 4,  true),
+    NAME_OPS_BIG(8, 2, false, 8, 4,  true),
+    NAME_OPS_BIG(8, 2, false, 8, 8,  true),
+    NAME_OPS_BIG(8, 2, false, 1, 1, false),
+    NAME_OPS_BIG(8, 2, false, 2, 1, false),
+    NAME_OPS_BIG(8, 2, false, 4, 1, false),
+    NAME_OPS_BIG(8, 2, false, 8, 1, false),
+    NAME_OPS_BIG(8, 2, false, 2, 2, false),
+    NAME_OPS_BIG(8, 2, false, 4, 2, false),
+    NAME_OPS_BIG(8, 2, false, 8, 2, false),
+    NAME_OPS_BIG(8, 2, false, 4, 4, false),
+    NAME_OPS_BIG(8, 2, false, 8, 4, false),
+    NAME_OPS_BIG(8, 2, false, 8, 8, false),
+};
+
+const MemoryRegionOps ops_list_big_l_valid[] = {
+    NAME_OPS_BIG(4, 4,  true, 1, 1,  true),
+    NAME_OPS_BIG(4, 4,  true, 2, 1,  true),
+    NAME_OPS_BIG(4, 4,  true, 4, 1,  true),
+    NAME_OPS_BIG(4, 4,  true, 8, 1,  true),
+    NAME_OPS_BIG(4, 4,  true, 2, 2,  true),
+    NAME_OPS_BIG(4, 4,  true, 4, 2,  true),
+    NAME_OPS_BIG(4, 4,  true, 8, 2,  true),
+    NAME_OPS_BIG(4, 4,  true, 4, 4,  true),
+    NAME_OPS_BIG(4, 4,  true, 8, 4,  true),
+    NAME_OPS_BIG(4, 4,  true, 8, 8,  true),
+    NAME_OPS_BIG(4, 4,  true, 1, 1, false),
+    NAME_OPS_BIG(4, 4,  true, 2, 1, false),
+    NAME_OPS_BIG(4, 4,  true, 4, 1, false),
+    NAME_OPS_BIG(4, 4,  true, 8, 1, false),
+    NAME_OPS_BIG(4, 4,  true, 2, 2, false),
+    NAME_OPS_BIG(4, 4,  true, 4, 2, false),
+    NAME_OPS_BIG(4, 4,  true, 8, 2, false),
+    NAME_OPS_BIG(4, 4,  true, 4, 4, false),
+    NAME_OPS_BIG(4, 4,  true, 8, 4, false),
+    NAME_OPS_BIG(4, 4,  true, 8, 8, false),
+    NAME_OPS_BIG(8, 4,  true, 1, 1,  true),
+    NAME_OPS_BIG(8, 4,  true, 2, 1,  true),
+    NAME_OPS_BIG(8, 4,  true, 4, 1,  true),
+    NAME_OPS_BIG(8, 4,  true, 8, 1,  true),
+    NAME_OPS_BIG(8, 4,  true, 2, 2,  true),
+    NAME_OPS_BIG(8, 4,  true, 4, 2,  true),
+    NAME_OPS_BIG(8, 4,  true, 8, 2,  true),
+    NAME_OPS_BIG(8, 4,  true, 4, 4,  true),
+    NAME_OPS_BIG(8, 4,  true, 8, 4,  true),
+    NAME_OPS_BIG(8, 4,  true, 8, 8,  true),
+    NAME_OPS_BIG(8, 4,  true, 1, 1, false),
+    NAME_OPS_BIG(8, 4,  true, 2, 1, false),
+    NAME_OPS_BIG(8, 4,  true, 4, 1, false),
+    NAME_OPS_BIG(8, 4,  true, 8, 1, false),
+    NAME_OPS_BIG(8, 4,  true, 2, 2, false),
+    NAME_OPS_BIG(8, 4,  true, 4, 2, false),
+    NAME_OPS_BIG(8, 4,  true, 8, 2, false),
+    NAME_OPS_BIG(8, 4,  true, 4, 4, false),
+    NAME_OPS_BIG(8, 4,  true, 8, 4, false),
+    NAME_OPS_BIG(8, 4,  true, 8, 8, false),
+};
+
+const MemoryRegionOps ops_list_big_l_invalid[] = {
+    NAME_OPS_BIG(4, 4, false, 1, 1,  true),
+    NAME_OPS_BIG(4, 4, false, 2, 1,  true),
+    NAME_OPS_BIG(4, 4, false, 4, 1,  true),
+    NAME_OPS_BIG(4, 4, false, 8, 1,  true),
+    NAME_OPS_BIG(4, 4, false, 2, 2,  true),
+    NAME_OPS_BIG(4, 4, false, 4, 2,  true),
+    NAME_OPS_BIG(4, 4, false, 8, 2,  true),
+    NAME_OPS_BIG(4, 4, false, 4, 4,  true),
+    NAME_OPS_BIG(4, 4, false, 8, 4,  true),
+    NAME_OPS_BIG(4, 4, false, 8, 8,  true),
+    NAME_OPS_BIG(4, 4, false, 1, 1, false),
+    NAME_OPS_BIG(4, 4, false, 2, 1, false),
+    NAME_OPS_BIG(4, 4, false, 4, 1, false),
+    NAME_OPS_BIG(4, 4, false, 8, 1, false),
+    NAME_OPS_BIG(4, 4, false, 2, 2, false),
+    NAME_OPS_BIG(4, 4, false, 4, 2, false),
+    NAME_OPS_BIG(4, 4, false, 8, 2, false),
+    NAME_OPS_BIG(4, 4, false, 4, 4, false),
+    NAME_OPS_BIG(4, 4, false, 8, 4, false),
+    NAME_OPS_BIG(4, 4, false, 8, 8, false),
+    NAME_OPS_BIG(8, 4, false, 1, 1,  true),
+    NAME_OPS_BIG(8, 4, false, 2, 1,  true),
+    NAME_OPS_BIG(8, 4, false, 4, 1,  true),
+    NAME_OPS_BIG(8, 4, false, 8, 1,  true),
+    NAME_OPS_BIG(8, 4, false, 2, 2,  true),
+    NAME_OPS_BIG(8, 4, false, 4, 2,  true),
+    NAME_OPS_BIG(8, 4, false, 8, 2,  true),
+    NAME_OPS_BIG(8, 4, false, 4, 4,  true),
+    NAME_OPS_BIG(8, 4, false, 8, 4,  true),
+    NAME_OPS_BIG(8, 4, false, 8, 8,  true),
+    NAME_OPS_BIG(8, 4, false, 1, 1, false),
+    NAME_OPS_BIG(8, 4, false, 2, 1, false),
+    NAME_OPS_BIG(8, 4, false, 4, 1, false),
+    NAME_OPS_BIG(8, 4, false, 8, 1, false),
+    NAME_OPS_BIG(8, 4, false, 2, 2, false),
+    NAME_OPS_BIG(8, 4, false, 4, 2, false),
+    NAME_OPS_BIG(8, 4, false, 8, 2, false),
+    NAME_OPS_BIG(8, 4, false, 4, 4, false),
+    NAME_OPS_BIG(8, 4, false, 8, 4, false),
+    NAME_OPS_BIG(8, 4, false, 8, 8, false),
+};
+
+const MemoryRegionOps ops_list_big_q_valid[] = {
+    NAME_OPS_BIG(8, 8,  true, 1, 1,  true),
+    NAME_OPS_BIG(8, 8,  true, 2, 1,  true),
+    NAME_OPS_BIG(8, 8,  true, 4, 1,  true),
+    NAME_OPS_BIG(8, 8,  true, 8, 1,  true),
+    NAME_OPS_BIG(8, 8,  true, 2, 2,  true),
+    NAME_OPS_BIG(8, 8,  true, 4, 2,  true),
+    NAME_OPS_BIG(8, 8,  true, 8, 2,  true),
+    NAME_OPS_BIG(8, 8,  true, 4, 4,  true),
+    NAME_OPS_BIG(8, 8,  true, 8, 4,  true),
+    NAME_OPS_BIG(8, 8,  true, 8, 8,  true),
+    NAME_OPS_BIG(8, 8,  true, 1, 1, false),
+    NAME_OPS_BIG(8, 8,  true, 2, 1, false),
+    NAME_OPS_BIG(8, 8,  true, 4, 1, false),
+    NAME_OPS_BIG(8, 8,  true, 8, 1, false),
+    NAME_OPS_BIG(8, 8,  true, 2, 2, false),
+    NAME_OPS_BIG(8, 8,  true, 4, 2, false),
+    NAME_OPS_BIG(8, 8,  true, 8, 2, false),
+    NAME_OPS_BIG(8, 8,  true, 4, 4, false),
+    NAME_OPS_BIG(8, 8,  true, 8, 4, false),
+    NAME_OPS_BIG(8, 8,  true, 8, 8, false),
+};
+
+const MemoryRegionOps ops_list_big_q_invalid[] = {
+    NAME_OPS_BIG(8, 8, false, 1, 1,  true),
+    NAME_OPS_BIG(8, 8, false, 2, 1,  true),
+    NAME_OPS_BIG(8, 8, false, 4, 1,  true),
+    NAME_OPS_BIG(8, 8, false, 8, 1,  true),
+    NAME_OPS_BIG(8, 8, false, 2, 2,  true),
+    NAME_OPS_BIG(8, 8, false, 4, 2,  true),
+    NAME_OPS_BIG(8, 8, false, 8, 2,  true),
+    NAME_OPS_BIG(8, 8, false, 4, 4,  true),
+    NAME_OPS_BIG(8, 8, false, 8, 4,  true),
+    NAME_OPS_BIG(8, 8, false, 8, 8,  true),
+    NAME_OPS_BIG(8, 8, false, 1, 1, false),
+    NAME_OPS_BIG(8, 8, false, 2, 1, false),
+    NAME_OPS_BIG(8, 8, false, 4, 1, false),
+    NAME_OPS_BIG(8, 8, false, 8, 1, false),
+    NAME_OPS_BIG(8, 8, false, 2, 2, false),
+    NAME_OPS_BIG(8, 8, false, 4, 2, false),
+    NAME_OPS_BIG(8, 8, false, 8, 2, false),
+    NAME_OPS_BIG(8, 8, false, 4, 4, false),
+    NAME_OPS_BIG(8, 8, false, 8, 4, false),
+    NAME_OPS_BIG(8, 8, false, 8, 8, false),
+};
+
+#define N_OPS_LIST_LITTLE_B_VALID \
+    (sizeof(ops_list_little_b_valid) / sizeof(MemoryRegionOps))
+#define N_OPS_LIST_LITTLE_W_VALID \
+    (sizeof(ops_list_little_w_valid) / sizeof(MemoryRegionOps))
+#define N_OPS_LIST_LITTLE_L_VALID \
+    (sizeof(ops_list_little_l_valid) / sizeof(MemoryRegionOps))
+#define N_OPS_LIST_LITTLE_Q_VALID \
+    (sizeof(ops_list_little_q_valid) / sizeof(MemoryRegionOps))
+#define N_OPS_LIST_LITTLE_B_INVALID \
+    (sizeof(ops_list_little_b_invalid) / sizeof(MemoryRegionOps))
+#define N_OPS_LIST_LITTLE_W_INVALID \
+    (sizeof(ops_list_little_w_invalid) / sizeof(MemoryRegionOps))
+#define N_OPS_LIST_LITTLE_L_INVALID \
+    (sizeof(ops_list_little_l_invalid) / sizeof(MemoryRegionOps))
+#define N_OPS_LIST_LITTLE_Q_INVALID \
+    (sizeof(ops_list_little_q_invalid) / sizeof(MemoryRegionOps))
+#define N_OPS_LIST_BIG_B_VALID \
+    (sizeof(ops_list_big_b_valid) / sizeof(MemoryRegionOps))
+#define N_OPS_LIST_BIG_W_VALID \
+    (sizeof(ops_list_big_w_valid) / sizeof(MemoryRegionOps))
+#define N_OPS_LIST_BIG_L_VALID \
+    (sizeof(ops_list_big_l_valid) / sizeof(MemoryRegionOps))
+#define N_OPS_LIST_BIG_Q_VALID \
+    (sizeof(ops_list_big_q_valid) / sizeof(MemoryRegionOps))
+#define N_OPS_LIST_BIG_B_INVALID \
+    (sizeof(ops_list_big_b_invalid) / sizeof(MemoryRegionOps))
+#define N_OPS_LIST_BIG_W_INVALID \
+    (sizeof(ops_list_big_w_invalid) / sizeof(MemoryRegionOps))
+#define N_OPS_LIST_BIG_L_INVALID \
+    (sizeof(ops_list_big_l_invalid) / sizeof(MemoryRegionOps))
+#define N_OPS_LIST_BIG_Q_INVALID \
+    (sizeof(ops_list_big_q_invalid) / sizeof(MemoryRegionOps))
+
+#define N_OPS_LIST                              \
+    (N_OPS_LIST_LITTLE_B_VALID +                \
+     N_OPS_LIST_LITTLE_B_INVALID +              \
+     N_OPS_LIST_LITTLE_W_VALID +                \
+     N_OPS_LIST_LITTLE_W_INVALID +              \
+     N_OPS_LIST_LITTLE_L_VALID +                \
+     N_OPS_LIST_LITTLE_L_INVALID +              \
+     N_OPS_LIST_LITTLE_Q_VALID +                \
+     N_OPS_LIST_LITTLE_Q_INVALID +              \
+     N_OPS_LIST_BIG_B_VALID +                   \
+     N_OPS_LIST_BIG_B_INVALID +                 \
+     N_OPS_LIST_BIG_W_VALID +                   \
+     N_OPS_LIST_BIG_W_INVALID +                 \
+     N_OPS_LIST_BIG_L_VALID +                   \
+     N_OPS_LIST_BIG_L_INVALID +                 \
+     N_OPS_LIST_BIG_Q_VALID +                   \
+     N_OPS_LIST_BIG_Q_INVALID)
+
+#define OFF_IDX_OPS_LIST_LITTLE_B_VALID \
+    (0)
+#define OFF_IDX_OPS_LIST_LITTLE_B_INVALID \
+    (OFF_IDX_OPS_LIST_LITTLE_B_VALID + N_OPS_LIST_LITTLE_B_VALID)
+#define OFF_IDX_OPS_LIST_LITTLE_W_VALID \
+    (OFF_IDX_OPS_LIST_LITTLE_B_INVALID + N_OPS_LIST_LITTLE_B_INVALID)
+#define OFF_IDX_OPS_LIST_LITTLE_W_INVALID \
+    (OFF_IDX_OPS_LIST_LITTLE_W_VALID + N_OPS_LIST_LITTLE_W_VALID)
+#define OFF_IDX_OPS_LIST_LITTLE_L_VALID \
+    (OFF_IDX_OPS_LIST_LITTLE_W_INVALID + N_OPS_LIST_LITTLE_W_INVALID)
+#define OFF_IDX_OPS_LIST_LITTLE_L_INVALID \
+    (OFF_IDX_OPS_LIST_LITTLE_L_VALID + N_OPS_LIST_LITTLE_L_VALID)
+#define OFF_IDX_OPS_LIST_LITTLE_Q_VALID \
+    (OFF_IDX_OPS_LIST_LITTLE_L_INVALID + N_OPS_LIST_LITTLE_L_INVALID)
+#define OFF_IDX_OPS_LIST_LITTLE_Q_INVALID \
+    (OFF_IDX_OPS_LIST_LITTLE_Q_VALID + N_OPS_LIST_LITTLE_Q_VALID)
+#define OFF_IDX_OPS_LIST_BIG_B_VALID \
+    (OFF_IDX_OPS_LIST_LITTLE_Q_INVALID + N_OPS_LIST_LITTLE_Q_INVALID)
+#define OFF_IDX_OPS_LIST_BIG_B_INVALID \
+    (OFF_IDX_OPS_LIST_BIG_B_VALID + N_OPS_LIST_BIG_B_VALID)
+#define OFF_IDX_OPS_LIST_BIG_W_VALID \
+    (OFF_IDX_OPS_LIST_BIG_B_INVALID + N_OPS_LIST_BIG_B_INVALID)
+#define OFF_IDX_OPS_LIST_BIG_W_INVALID \
+    (OFF_IDX_OPS_LIST_BIG_W_VALID + N_OPS_LIST_BIG_W_VALID)
+#define OFF_IDX_OPS_LIST_BIG_L_VALID \
+    (OFF_IDX_OPS_LIST_BIG_W_INVALID + N_OPS_LIST_BIG_W_INVALID)
+#define OFF_IDX_OPS_LIST_BIG_L_INVALID \
+    (OFF_IDX_OPS_LIST_BIG_L_VALID + N_OPS_LIST_BIG_L_VALID)
+#define OFF_IDX_OPS_LIST_BIG_Q_VALID \
+    (OFF_IDX_OPS_LIST_BIG_L_INVALID + N_OPS_LIST_BIG_L_INVALID)
+#define OFF_IDX_OPS_LIST_BIG_Q_INVALID \
+    (OFF_IDX_OPS_LIST_BIG_Q_VALID + N_OPS_LIST_BIG_Q_VALID)
+
+#undef GEN_OPS_LITTLE
+#undef GEN_OPS_BIG
+#undef NAME_OPS_LITTLE
+#undef NAME_OPS_BIG
+#undef __JOIN2
+#undef __JOIN2_AGAIN
+#undef __JOIN6
+#undef __JOIN6_AGAIN
+#undef __STR
+#undef __STR_AGAIN
+
+#endif
