make_procedure_object.c

Go to the documentation of this file.
00001 /**************************************************************************
00002  *
00003  * Copyright (C) 2008, The EROS Group, LLC
00004  * All rights reserved.
00005  *
00006  * Redistribution and use in source and binary forms, with or
00007  * without modification, are permitted provided that the following
00008  * conditions are met:
00009  *
00010  *   - Redistributions of source code must contain the above 
00011  *     copyright notice, this list of conditions, and the following
00012  *     disclaimer. 
00013  *
00014  *   - Redistributions in binary form must reproduce the above
00015  *     copyright notice, this list of conditions, and the following
00016  *     disclaimer in the documentation and/or other materials 
00017  *     provided with the distribution.
00018  *
00019  *   - Neither the names of the copyright holders nor the names of any
00020  *     of any contributors may be used to endorse or promote products
00021  *     derived from this software without specific prior written
00022  *     permission. 
00023  *
00024  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00025  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00026  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00027  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00028  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00029  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00030  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00031  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00032  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00033  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00034  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00035  *
00036  **************************************************************************/
00037 
00038 #include <gc/gc.h>
00039 #include <inttypes.h>
00040 #include "BUILD/bitc-runtime.h"
00041 
00067 
00068 void *
00069 bitc_emit_procedure_object(void *stubP, void *envP)
00070 {
00071   uint32_t envW = (uint32_t) envP;
00072   uint32_t stubW = (uint32_t) stubP;
00073 
00074   bitc_Procedure* proc = GC_ALLOC(sizeof(bitc_Procedure));
00075 
00076   /* SETHI %hi(stubW),%g1 */
00077   proc->code[0] = 0x03000000u | (stubW >> 10);
00078   /* JMPL %g1 + %lo(stubW), %g1 */
00079   proc->code[1] = 0x83c06000 | (stubW & 0x3ffu);
00080   /* LD   [%g1 + 0x8], %g1 */
00081   proc->code[2] = 0xc2006008;
00082 
00083   proc->env.ptr = envP;
00084 
00085   return proc;
00086 
00087   /* On this architecture, no explicit iCache flush is required as
00088    * long as a branch appears. Return suffices for a branch, which is why
00089    * this must not be an inline procedure. */
00090 }
00091 

Generated on Fri Feb 10 07:59:22 2012 for BitC Runtime Library by  doxygen 1.4.7