示例#1
0
static void Createaddresses(void)
{
    QUAD *head = intermed_head;
    while (head)
    {
        if (head->dc.opcode != i_assnblock && head->dc.opcode != i_clrblock)
            if (head->dc.opcode != i_label && head->dc.opcode != i_passthrough && !head->ignoreMe)
            {
                if (head->ans && !(head->temps & TEMP_ANS) && head->ans->mode != i_immed)
                {
                    CreateMem(head->ans);
                }
                if (head->dc.left && !(head->temps & TEMP_LEFT))
                {
                    // fixme...
                    if (head->dc.left->mode == i_direct || (!isarithmeticconst(head->dc.left->offset) &&
                        head->dc.left->offset->type != en_labcon && head->dc.left->offset->type != en_add))
                        CreateMem(head->dc.left);
                }
                if (head->dc.right && !(head->temps & TEMP_RIGHT))
                {
                    // fixme...
                    if (head->dc.right->mode == i_direct || (!isarithmeticconst(head->dc.right->offset) &&
                        head->dc.right->offset->type != en_labcon && head->dc.right->offset->type != en_add))
                        CreateMem(head->dc.right);
                }
            }
        head = head->fwd;
    }	
}
GenericImageMemBase::GenericImageMemBase(size_t nBytes)
: m_memOK(false)
, m_byteSize(0)
, m_pByteMem(NULL)
{
   CreateMem(nBytes);
}
示例#3
0
void InitSlab(int mb)
    {

#ifdef SlabMemory
    if (SlabRootLoc)
        DeleteSlab();
    CurrentSlabSize = mb * 0x100000;
    CreateMem(&SlabRootLoc, 64, CurrentSlabSize, &SlabNumber, &LargeSlab, "SLAB");
	CurrentSlabLoc = SlabRootLoc + (0x40 - ((uint64)(SlabRootLoc) &0x3f));
#endif

    FillSlab();
    }
void WordImageMem::CopyFrom(const unsigned short* wordPtr, size_t nWords, ECopyMode cmode)
{
   CreateMem(nWords*sizeof(unsigned short));

   if (MemOK()) {
      switch (cmode) {
         case EYM_Reverse: {
            const unsigned short* sPtr=wordPtr+nWords;
            unsigned short* dPtr=WordMemPtrRef();
            for (size_t i=0; i<nWords; i++) {*dPtr=*(--sPtr); ++dPtr;};
         } break;

         case EYM_Forward:
         default: {
            ::memcpy(WordMemPtrRef(), wordPtr, nWords*sizeof(unsigned short));

         }
      }//switch
   }
}
void GenericImageMemBase::CopyFrom(const unsigned char* bytePtr, size_t nBytes, ECopyMode cmode)
{
   CreateMem(nBytes);

   if (m_memOK) {
      switch (cmode) {
         case EYM_Reverse: {
            const unsigned char* sPtr=bytePtr+nBytes;
            unsigned char* dPtr=m_pByteMem;
            for (size_t i=0; i<nBytes; i++) {*dPtr=*(--sPtr); ++dPtr;};
         } break;

         case EYM_Forward:
         default: {
            ::memcpy(m_pByteMem, bytePtr, nBytes);

         }
      }//switch
   }
}