view release on metacpan or search on metacpan
builder/Affix.pm view on Meta::CPAN
#print $dest->child($filename) . " is up to date\n";
my $extract = $dest->child('extract');
my $output = $dest->child('output');
my $ret = unzip( $filename, $extract );
warn $ret;
my $pre = Path::Tiny->cwd->child( qw[blib arch auto], $opt{meta}->name )->absolute;
#$pre->mkpath;
for my $sub (qw[lib include]) {
for my $kid ( $ret->child($sub)->children ) {
$pre->child( $sub, $kid->basename )->parent->mkpath;
$kid->copy( $pre->child( $sub, $kid->basename ) );
}
}
}
else {
die sprintf 'Failed to download %s: %s!', $response->{url}, $response->{content}
unless $response->{success};
}
}
else { # Build from source on all other platforms
builder/Affix.pm view on Meta::CPAN
my $header = $u->getHeaderInfo();
#ddx $header;
my $destfile = $dest->child( $header->{Name} );
next if $header->{Name} =~ m[/$]; # Directory
next if $destfile->is_dir;
next
if $destfile->is_file &&
stat( $destfile->absolute->stringify )->mtime < $header->{Time};
warn $destfile;
$destfile->parent->mkpath;
my $raw = '';
while ( ( $status = $u->read( my $buff ) ) > 0 ) { $raw .= $buff }
$destfile->spew_raw($raw);
$destfile->touch;
$retval = $destfile->parent if $destfile =~ 'build.log';
}
return $retval;
}
1;
dyncall/buildsys/cmake/Modules/UseLATEX.cmake view on Meta::CPAN
# them. I use the same boilerplate as the starting point for all
# and just copy it with different configurations. This was what the
# separate ADD_LATEX_DOCUMENT method was supposed to originally be for.
# Since its external use is pretty much deprecated, I removed that
# documentation.
#
# 1.4.1 Copy .sty files along with the other class and package files.
#
# 1.4.0 Added a MANGLE_TARGET_NAMES option that will mangle the target names.
#
# Fixed problem with copying bib files that became apparent with
# CMake 2.4.
#
# 1.3.0 Added a LATEX_OUTPUT_PATH variable that allows you or the user to
# specify where the built latex documents to go. This is especially
# handy if you want to do in-source builds.
#
# Removed the ADD_LATEX_IMAGES macro and absorbed the functionality
# into ADD_LATEX_DOCUMENT. The old interface was always kind of
# clunky anyway since you had to specify the image directory in both
# places. It also made supporting LATEX_OUTPUT_PATH problematic.
dyncall/doc/disas_examples/arm.darwin_thumb.disas view on Meta::CPAN
14: 05 91 str r1, [sp, #20]
16: 04 92 str r2, [sp, #16]
18: 03 93 str r3, [sp, #12]
1a: cd f8 08 e0 str.w lr, [sp, #8]
1e: cd f8 04 c0 str.w r12, [sp, #4]
22: cd f8 00 90 str.w r9, [sp]
26: 07 b0 add sp, #28
28: 80 bd pop {r7, pc}
_nonleaf_call:
2a: 83 b0 sub sp, #12 ; | space for spill area (b/c pushing was apparently too easy)
2c: 80 b5 push {r7, lr} ; |
2e: 6f 46 mov r7, sp ; |
30: 8d b0 sub sp, #52 ; | prolog
32: 3b 61 str r3, [r7, #16] ; | |
34: fa 60 str r2, [r7, #12] ; | | spill (before reg save area)
36: b9 60 str r1, [r7, #8] ; | |
38: 4c 21 movs r1, #76
3a: 0b aa add r2, sp, #44
3c: 0c 90 str r0, [sp, #48]
3e: 07 f1 08 00 add.w r0, r7, #8
dyncall/doc/disas_examples/ppc.darwin.disas view on Meta::CPAN
40: 94 21 ff b0 stwu 1, -80(1) ; | open frame and store sp at top of stack
44: 7c 3e 0b 78 mr 30, 1 ; / sp -> gpr30, latter used for some fixed addressing below
48: 90 7e 00 68 stw 3, 104(30) ; \
4c: 90 9e 00 6c stw 4, 108(30) ; |
50: 90 be 00 70 stw 5, 112(30) ; |
54: 90 de 00 74 stw 6, 116(30) ; |
58: 90 fe 00 78 stw 7, 120(30) ; | all in args -> spill area in prev frame
5c: 91 1e 00 7c stw 8, 124(30) ; |
60: 91 3e 00 80 stw 9, 128(30) ; |
64: 91 5e 00 84 stw 10, 132(30) ; |
68: 80 01 00 00 lwz 0, 0(1) ; fetch back-chain ptr (parent frame's sp) from stack of top by prolog -> gpr0, and ...
6c: 94 01 ff 10 stwu 0, -240(1) ; ... update it further up the stack for alloca(220) - with padding to guarantee alignment
70: 38 41 00 40 addi 2, 1, 64 ; |
74: 38 02 00 0f addi 0, 2, 15 ; | start of alloca()'d memory -> gpr2, by ...
78: 54 00 e1 3e srwi 0, 0, 4 ; | ... using gpr0 as helper to align to 16b, leaving at least 64b at top of stack
7c: 54 02 20 36 slwi 2, 0, 4 ; |
80: 38 00 00 4c li 0, 76 ; 'L' -> gpr0, and ...
84: 98 02 00 00 stb 0, 0(2) ; ... store in local area (of alloca()'d space)
88: 80 7e 00 6c lwz 3, 108(30) ; |
8c: 80 9e 00 70 lwz 4, 112(30) ; |
90: 80 be 00 74 lwz 5, 116(30) ; |
dyncall/doc/disas_examples/ppc.darwin.disas view on Meta::CPAN
44: 94 21 ff a0 stwu 1, -96(1) ; |
48: 7c 3e 0b 78 mr 30, 1 ; /
4c: 90 7e 00 78 stw 3, 120(30) ; \
50: 90 9e 00 7c stw 4, 124(30) ; |
54: 90 be 00 80 stw 5, 128(30) ; |
58: 90 de 00 84 stw 6, 132(30) ; |
5c: 90 fe 00 88 stw 7, 136(30) ; | in args 0,1,2,3,4,5,6,7 -> spill area in prev frame
60: 91 1e 00 8c stw 8, 140(30) ; |
64: 91 3e 00 90 stw 9, 144(30) ; |
68: 91 5e 00 94 stw 10, 148(30) ; |
6c: 80 01 00 00 lwz 0, 0(1) ; fetch back-chain ptr (parent frame's sp) from stack of top by prolog -> gpr0, and ...
70: 94 01 ff 10 stwu 0, -240(1) ; ... update it further up the stack for alloca(220) - with padding to guarantee alignment
74: 38 41 00 50 addi 2, 1, 80 ; |
78: 38 02 00 0f addi 0, 2, 15 ; | start of alloca()'d memory -> gpr2, by ...
7c: 54 00 e1 3e srwi 0, 0, 4 ; | ... using gpr0 as helper to align to 16b, leaving at least 64b at top of stack
80: 54 02 20 36 slwi 2, 0, 4 ; |
84: 38 00 00 4c li 0, 76 ; 'L' -> gpr0, and ...
88: 98 02 00 00 stb 0, 0(2) ; ... store in local area (of alloca()'d space)
8c: 80 1e 00 9c lwz 0, 156(30) ; arg 7 (fetched from stack param area from prev frame), and ...
90: 90 01 00 38 stw 0, 56(1) ; ... "pushed" onto stack
94: 80 7e 00 7c lwz 3, 124(30) ; |
dyncall/doc/disas_examples/ppc.darwin.disas view on Meta::CPAN
134: 90 1e 00 74 stw 0, 116(30) ; | in arg 8
138: 80 09 00 00 lwz 0, 0(9) ; |
13c: 90 1e 00 64 stw 0, 100(30) ; /
140: 81 3e 00 74 lwz 9, 116(30) ; \
144: 80 5e 00 74 lwz 2, 116(30) ; |
148: 38 02 00 08 addi 0, 2, 8 ; |
14c: 90 1e 00 74 stw 0, 116(30) ; | in arg 9 (float, promoted to double)
150: c8 09 00 00 lfd 0, 0(9) ; |
154: fc 00 00 18 frsp 0, 0 ; |
158: d0 1e 00 70 stfs 0, 112(30) ; /
15c: 80 01 00 00 lwz 0, 0(1) ; fetch back-chain ptr (parent frame's sp) from stack of top by prolog -> gpr0, and ...
160: 94 01 ff 10 stwu 0, -240(1) ; ... update it further up the stack for alloca
164: 38 41 00 50 addi 2, 1, 80 ; |
168: 38 02 00 0f addi 0, 2, 15 ; | start of alloca()'d memory -> gpr2, by ...
16c: 54 00 e1 3e srwi 0, 0, 4 ; | ... using gpr0 as helper to align to 16b, l
170: 54 02 20 36 slwi 2, 0, 4 ; |
174: 38 00 00 4c li 0, 76 ; 'L' -> gpr0, and ...
178: 98 02 00 00 stb 0, 0(2) ; ... store in local area (of alloca()'d space)
17c: 80 7e 00 50 lwz 3, 80(30) ; arg 0
180: 80 9e 00 54 lwz 4, 84(30) ; arg 1
184: 80 be 00 58 lwz 5, 88(30) ; arg 2
dyncall/doc/disas_examples/ppc64.elfabi.disas view on Meta::CPAN
60: 7c 60 1b 78 mr r0,r3 ; in arg 0 -> gpr0
64: 7c 8b 23 78 mr r11,r4 ; in arg 1 -> gpr11
68: 90 1f 00 c0 stw r0,192(r31) ; |
6c: 91 7f 00 c8 stw r11,200(r31) ; |
70: 90 bf 00 d0 stw r5,208(r31) ; |
74: 90 df 00 d8 stw r6,216(r31) ; |
78: 90 ff 00 e0 stw r7,224(r31) ; | all in args -> spill area in prev frame (jump over own frame (144) + linkage area of prev frame (48) = 192)
7c: 91 1f 00 e8 stw r8,232(r31) ; |
80: 91 3f 00 f0 stw r9,240(r31) ; |
84: 91 5f 00 f8 stw r10,248(r31) ; |
88: e8 01 00 00 ld r0,0(r1) ; fetch back-chain ptr (parent frame's sp) from stack of top by prolog -> gpr0, and ...
8c: f8 01 ff 11 stdu r0,-240(r1) ; ... update it further up the stack for alloca(220) - with padding to guarantee alignment
90: 39 21 00 70 addi r9,r1,112 ; |
94: f9 3f 00 70 std r9,112(r31) ; |
98: e9 3f 00 70 ld r9,112(r31) ; |
9c: 38 09 00 0f addi r0,r9,15 ; | start of alloca()'d memory -> gpr9, by ...
a0: 78 00 e1 02 rldicl r0,r0,60,4 ; | ... using gpr0 as helper to align to 16b, leaving at least 112b at top of stack
a4: 78 00 26 e4 rldicr r0,r0,4,59 ; |
a8: f8 1f 00 70 std r0,112(r31) ; |
ac: e9 3f 00 70 ld r9,112(r31) ; |
b0: 38 00 00 4c li r0,76 ; 'L' -> gpr0, and ...
dyncall/doc/manual/callconvs/callconv_ppc32.tex view on Meta::CPAN
& 9th word of arg data & & \\
& gpr10 & \mrrbrace{3}{spill area (as needed)} & \\
& \ldots & & \\
& gpr3 & & \\
\hhline{~-~~}
\mrlbrace{6}{linkage area} & reserved & & \\
& reserved & & \\
& reserved & & \\
& return address (callee saved) & & \\
& condition reg (callee saved) & & \\
& parent stack frame pointer & & \\
\hhline{~=~~}
register save area & & & \mrrbrace{4}{current frame} \\
\hhline{~-~~}
local data & & & \\
\hhline{~-~~}
parameter area & & & \\
\hhline{~-~~}
linkage area & \vdots & & \\
\end{tabular}
\caption{Stack layout on ppc32 Darwin}
dyncall/doc/manual/callconvs/callconv_ppc32.tex view on Meta::CPAN
register save area & \hspace{4cm} & & \mrrbrace{7}{caller's frame} \\
\hhline{~-~~}
local data & & & \\
\hhline{~-~~}
\mrlbrace{3}{parameter area} & last arg & \mrrbrace{3}{stack parameters} & \\
& \ldots & & \\
& first arg passed via stack & & \\
\hhline{~-~~}
& return address (callee saved) & & \\
\hhline{~-~~}
& parent stack frame pointer & & \\
\hhline{~=~~}
register save area & & & \mrrbrace{4}{current frame} \\
\hhline{~-~~}
local data & & & \\
\hhline{~-~~}
parameter area & & & \\
\hhline{~-~~}
& \vdots & & \\
\end{tabular}
\caption{Stack layout on System V ABI for PowerPC 32-bit calling convention}
dyncall/doc/manual/callconvs/callconv_ppc64.tex view on Meta::CPAN
& arg 8 & & \\
& gpr10 & \mrrbrace{3}{spill area (as needed)} & \\
& \ldots & & \\
& gpr3 & & \\
\hhline{~-~~}
\mrlbrace{6}{linkage area} & TOC ptr reg & & \\
& reserved & & \\
& reserved & & \\
& return address (callee saved) & & \\
& condition reg (callee saved) & & \\
& parent stack frame pointer & & \\
\hhline{~=~~}
register save area & & & \mrrbrace{4}{current frame} \\
\hhline{~-~~}
local data & & & \\
\hhline{~-~~}
parameter area & & & \\
\hhline{~-~~}
linkage area & \vdots & & \\
\end{tabular}
\caption{Stack layout on ppc64 ELF ABI}
dyncall/dyncall/dyncall_call_ppc32.S view on Meta::CPAN
Details:
- Stack frames are always aligned on 16 byte
- Reserve GPR2 (System register)
- The GPR3 .. GPR10 are loaded
- The FPR1 .. FPR8 are loaded
- No support for Vector Parameters so far.
Frame structure:
on entry, parent frame layout:
offset
4: LR save word (Callee stores LR in parent frame)
0: parent stack frame (back-chain)
after frame initialization:
stack size = ( (8+15) + stacksize ) & -(16)
... locals and register spills
8: parameter list area
4: LR save word (Callee stores LR in parent frame)
0: parent stack frame (back-chain)
*/
.align 2
GLOBAL_C(dcCall_ppc32_sysv)
ENTRY_C(dcCall_ppc32_sysv)
mflr r0 /* r0 = return address */
stw r0,4(r1) /* store r0 to link-area */
/* compute aligned stack-size */
dyncall/dyncall/dyncall_call_ppc64.S view on Meta::CPAN
- Stack frames are always aligned on 16 byte
- Reserve GPR2 (System register)
- The GPR3 .. GPR10 are loaded
- The FPR1 .. FPR8 are loaded
- No support for Vector Parameters so far.
- Parameter Area (min. v1:64 Bytes v2:0 Byte)
- Frame Header Area (v1:48 Bytes v2:32 Bytes)
Frame structure:
on entry, parent frame layout:
offset
16: LR save word (Callee stores LR in parent frame)
0: parent stack frame (back-chain)
after frame initialization:
v1: stack size = ( (48+64+8+15) + stacksize ) & -(16)
v2: stack size = ( (32+0+8+15) + stacksize ) & -(16)
... locals and register spills
48 or 32: parameter list area
16: LR save word (Callee stores LR in parent frame)
0: parent stack frame (back-chain)
*/
/* Constants */
#if DC__ABI_PPC64_ELF_V != 2
STACK_MIN = 120 /* v1 */
TOC_SAVE = 40
PARAM_SAVE = 48
#else
STACK_MIN = 40 /* v2 */
TOC_SAVE = 24
dyncall/dyncallback/dyncall_callback_sparc32.s view on Meta::CPAN
.globl dcCallbackThunkEntry
/* Called by thunk - thunk stores pointer to DCCallback */
/* in %g1, and pointer to called function in %g2 */
dcCallbackThunkEntry:
/* Prolog. */
/* Frame size of 104b comes from needing storage space for the following: */
/* req_reg_save_area:64 + spill:24 + dcargs:4 + retval:8 + pad:4 */
/* Spill area could theoretically be only 16b, b/c cbHandler function has */
/* 4 arguments, but let's be conservative. */ /* cbHandler function might decide to spill (6x4b) @@@ testcode, or rely on 8byte return space in parent stack */
save %sp, -104, %sp
/* Spill register args as dcargs is based on that (in prev frame, after */
/* req_reg_save_area and struct_ret_ptr). */
add %fp, 68, %l0
st %i0, [ %l0 + 0 ] /* reg arg 0 */
st %i1, [ %l0 + 4 ] /* reg arg 1 */
st %i2, [ %l0 + 8 ] /* reg arg 2 */
st %i3, [ %l0 + 12 ] /* reg arg 3 */
st %i4, [ %l0 + 16 ] /* reg arg 4 */
dyncall/dyncallback/dyncall_callback_x64.S view on Meta::CPAN
SET(DCArgs_size_win64,96) /* 8 (stack_ptr) + 4 (reg_count) + 4 (pad_w) + 4 (aggr_return_register) + 4 (pad) + 8*4 (int regs) + 8 (aggrs) + 8*4 (float regs) */
SET(DCArgs_size_sysv,144) /* 8 (stack_ptr) + 8 (reg_count) + 4 (aggr_return_register) + 4 (pad) + 8*6 (int regs) + 8 (aggrs) + 8*8 (float regs) */
SET(DCValue_size,8)
SET(DCRetRegs_SystemV_size,32)
/* frame local variable offsets relative to %rbp */
SET(FRAME_arg0_win64,48)
SET(FRAME_arg0_sysv,16)
SET(FRAME_return,8)
SET(FRAME_parent,0)
/* struct DCCallback layout, relative to ptr passed to functions below via RAX */
SET(CTX_thunk,0)
SET(CTX_handler,24)
SET(CTX_userdata,32)
SET(CTX_aggr_ret_reg,40)
SET(CTX_pad,44)
SET(CTX_aggrs_pp,48)
SET(DCCallback_size,56)
dyncall/dyncallback/dyncall_callback_x64_masm.asm view on Meta::CPAN
; auto-generated by gen-masm.sh
.CODE
DCThunk_size = 24
DCArgs_size_win64 = 96
DCArgs_size_sysv = 144
DCValue_size = 8
DCRetRegs_SystemV_size = 32
FRAME_arg0_win64 = 48
FRAME_arg0_sysv = 16
FRAME_return = 8
FRAME_parent = 0
CTX_thunk = 0
CTX_handler = 24
CTX_userdata = 32
CTX_aggr_ret_reg = 40
CTX_pad = 44
CTX_aggrs_pp = 48
DCCallback_size = 56
dcCallback_x64_sysv PROC
OPTION PROLOGUE:NONE, EPILOGUE:NONE
push RBP
dyncall/dyncallback/dyncall_callback_x86.S view on Meta::CPAN
DCValue_size = 8
CTX_thunk = 0
CTX_phandler = 16
CTX_pargsvt = 20
CTX_stack_cleanup = 24
CTX_userdata = 28
frame_arg0 = 8
frame_ret = 4
frame_parent = 0
frame_CTX = -4
frame_DCArgs = -24
frame_DCValue = -32
#define ASCII_L 76
#define ASCII_l 108
#define ASCII_d 100
#define ASCII_f 102
#define ASCII_i 105
#define ASCII_v 118
dyncall/dyncallback/dyncall_callback_x86.S view on Meta::CPAN
MOVL(ESP,EDX) /* EDX = DCValue* */
ANDL(LIT(-16),ESP) /* align stack to 16 bytes. */
/* call handler(context) */
PUSH(DWORD(EAX,CTX_userdata)) /* userdata */
PUSH(EDX) /* DCValue* */
PUSH(ECX) /* DCargs* */
PUSH(EAX) /* DCCallback* */
CALL_DWORD(EAX,CTX_phandler)
/* cleanup stack */
MOVL(EBP,ESP) /* reset esp to frame */
POP(ECX) /* skip parent frame */
POP(ECX) /* pop return address */
MOVL(DWORD(EBP,frame_CTX),EDX)
ADD(DWORD(EDX,CTX_stack_cleanup),ESP) /* cleanup stack */
PUSH(ECX) /* push back return address */
LEA(DWORD(EBP,frame_DCValue), EDX)
MOVL(DWORD(EBP,0), EBP) /* EBP = parent frame */
/* handle return value */
#if !defined(DC__OS_Minix)
CMP(LIT(ASCII_f),AL)
JE(LOCAL(return_f32))
CMP(LIT(ASCII_d),AL)
JE(LOCAL(return_f64))
#endif
/* All int cases (+ pointer & string cases) fall in the return_i64 case, here */
dyncall/dyncallback/dyncall_callback_x86_masm.asm view on Meta::CPAN
DCThunk_size = 16
DCArgs_size = 20
DCValue_size = 8
CTX_thunk = 0
CTX_phandler = 16
CTX_pargsvt = 20
CTX_stack_cleanup = 24
CTX_userdata = 28
frame_arg0 = 8
frame_ret = 4
frame_parent = 0
frame_CTX = -4
frame_DCArgs = -24
frame_DCValue = -32
_dcCallbackThunkEntry PROC
OPTION PROLOGUE:NONE, EPILOGUE:NONE
push EBP
mov EBP,ESP
push EAX
push 0
push EDX
dyncall/test/call_suite_aggrs/mk-cases.lua view on Meta::CPAN
require"config"
-- use shared helpers to generate cases
package.path = '../common/?.lua;' .. package.path
require"mk-cases"
-- returns: generated case str, num args; accumulates unique idx => aggr-sig in
-- aggrs (sequentially) and aggr-sig => {body,name} in seen_aggrs (depth first
-- for nested aggrs, so sub-aggrs conveniently precede parents)
function mkcase(id, sig, aggrs, seen_aggrs)
local sig = trim(sig)
local fsig = put_sig_rtype_first(sig)
local h = { "/* ",id,":",sig," */ " }
local t = { }
local pos = -1
local n_nest = 0
local aggr = { }
local aggr_sig = { }
aggr[0] = { } -- non-sequential [0] collects all non-aggr types (not used, though)
dyncall/test/callback_suite_aggrs/mk-cases.lua view on Meta::CPAN
require "config"
-- use shared helpers to generate cases
package.path = '../common/?.lua;' .. package.path
require"mk-cases"
-- returns: generated case str, num args; accumulates unique idx => aggr-sig in
-- aggrs (sequentially) and aggr-sig => {body,name} in seen_aggrs (depth first
-- for nested aggrs, so sub-aggrs conveniently precede parents)
function mkcase(id, sig, aggrs, seen_aggrs)
local sig = trim(sig)
local fsig = put_sig_rtype_first(sig)
local h = { "/* ",id,":",sig," */ " }
local t = { }
local pos = -1
local n_nest = 0
local aggr = { }
local aggr_sig = { }
aggr[0] = { } -- non-sequential [0] collects all non-aggr types (not used, though)
lib/Affix.pm view on Meta::CPAN
use Sub::Util qw[subname];
use Text::ParseWords;
use Carp qw[];
use vars qw[@EXPORT_OK @EXPORT %EXPORT_TAGS];
use XSLoader;
#~ our $VMSize = 2; # defaults to 4096; passed to dcNewCallVM( ... )
my $ok = XSLoader::load();
END { _shutdown() if $ok; }
#
use parent 'Exporter';
@EXPORT_OK = sort map { @$_ = sort @$_; @$_ } values %EXPORT_TAGS;
$EXPORT_TAGS{'all'} = \@EXPORT_OK; # When you want to import everything
#@{ $EXPORT_TAGS{'enum'} } # Merge these under a single tag
# = sort map { defined $EXPORT_TAGS{$_} ? @{ $EXPORT_TAGS{$_} } : () }
# qw[types?]
# if 1 < scalar keys %EXPORT_TAGS;
@EXPORT # Export these tags (if prepended w/ ':') or functions by default
= sort map { m[^:(.+)] ? @{ $EXPORT_TAGS{$1} } : $_ } qw[:default :types]
if keys %EXPORT_TAGS > 1;
lib/Affix.xs view on Meta::CPAN
/* Returns the amount of padding needed after `offset` to ensure that the
following address will be aligned to `alignment`. */
size_t padding_needed_for(size_t offset, size_t alignment) {
if (alignment == 0) return 0;
size_t misalignment = offset % alignment;
if (misalignment) // round to the next multiple of alignment
return alignment - misalignment;
return 0; // already a multiple of alignment*/
}
void set_isa(const char *klass, const char *parent) {
dTHX;
HV *parent_stash = gv_stashpv(parent, GV_ADD | GV_ADDMULTI);
av_push(get_av(form("%s::ISA", klass), TRUE), newSVpv(parent, 0));
// TODO: make this spider up the list and make deeper connections?
}
void register_constant(const char *package, const char *name, SV *value) {
dTHX;
HV *_stash = gv_stashpv(package, TRUE);
newCONSTSUB(_stash, (char *)name, value);
}
void export_function__(HV *_export, const char *what, const char *_tag) {