void testAs() {
  boost::shared_ptr<int[]> sizes(new int[3]);
  sizes[0] = 2;
  sizes[1] = 1;
  sizes[2] = 2;

  boost::shared_ptr<int[]> array(new int[2]);
  array[0] = 1;
  array[1] = 1;

  SHEsis::ArrayStorage AS1(sizes);
  SHEsis::ArrayStorage AS2(sizes, array);
  AS2.getArray();
  AS2.getDimension();
  AS2.getSizes();
  AS2.set(1, 1);
}
    // ebp restored at end
    #define EPILOG() \
        AS2(    movd  edi, mm3                      )   \
        AS2(    movd  ebx, mm4                      )   \
        AS2(    movd  esi, mm5                      )   \
        AS2(    mov   esp, ebp                      )   \
        AS1(    pop   ebp                           )   \
        AS1(    emms                                )   \
        AS1(    ret 12                              )

#endif


    PROLOG()

    AS2(    movd  mm2, edx                      )

    #ifdef OLD_GCC_OFFSET
        AS2(    add   edx, 60                       )   // des1 = des1 key
    #else
        AS2(    add   edx, 56                       )   // des1 = des1 key
    #endif

    AS2(    mov   eax, DWORD PTR [esi]          )
    AS2(    mov   ebx, DWORD PTR [esi + 4]      )
    AS1(    bswap eax                           )    // left
    AS1(    bswap ebx                           )    // right

    AsmIPERM()

    DesRound() // 1