; ; File generated by cc65 v 2.11.0 ; .fopt compiler,"cc65 v 2.11.0" .setcpu "6502" .smart on .autoimport on .case on .debuginfo on .importzp sp, sreg, regsave, regbank, tmp1, ptr1, ptr2 .macpack longbranch .dbg file, "pmemalign.c", 7690, 1122209752 .dbg file, "../../include/stddef.h", 2974, 1061022172 .dbg file, "../../include/stdlib.h", 5287, 1122210074 .dbg file, "../../include/_heap.h", 1145, 1103497778 .dbg file, "../../include/errno.h", 3647, 1060696125 .import _malloc .import _free .export _posix_memalign ; --------------------------------------------------------------- ; int __fastcall__ posix_memalign (void**, unsigned int, unsigned int) ; --------------------------------------------------------------- .segment "CODE" .proc _posix_memalign .segment "CODE" ; ; { ; .dbg line, "pmemalign.c", 63 jsr pushax ; ; register struct usedblock* b; /* points to raw Block */ ; .dbg line, "pmemalign.c", 67 jsr decsp6 lda regbank+4 ldx regbank+5 jsr pushax ; ; register struct usedblock* u; /* points to User block */ ; .dbg line, "pmemalign.c", 68 lda regbank+2 ldx regbank+3 jsr pushax ; ; register struct usedblock* p; /* Points to upper block */ ; .dbg line, "pmemalign.c", 69 lda regbank+0 ldx regbank+1 jsr pushax ; ; if (size == 0) { ; .dbg line, "pmemalign.c", 72 ldy #$0C lda (sp),y iny ora (sp),y bne L0003 ; ; *memptr = NULL; ; .dbg line, "pmemalign.c", 73 ldy #$11 jsr ldaxysp sta sreg stx sreg+1 lda #$00 tay sta (sreg),y iny sta (sreg),y ; ; return EINVAL; ; .dbg line, "pmemalign.c", 74 tax lda #$07 jmp L0002 ; ; if (alignment == 0 || (alignment & --alignment) != 0) { ; .dbg line, "pmemalign.c", 78 L0003: iny lda (sp),y iny ora (sp),y beq L000A ldy #$11 jsr pushwysp ldx #$00 lda #$01 ldy #$10 jsr subeqysp jsr tosandax cpx #$00 bne L000A cmp #$00 beq L0009 ; ; *memptr = NULL; ; .dbg line, "pmemalign.c", 79 L000A: ldy #$11 jsr ldaxysp sta sreg stx sreg+1 lda #$00 tay sta (sreg),y iny sta (sreg),y ; ; return EINVAL; ; .dbg line, "pmemalign.c", 80 tax lda #$07 jmp L0002 ; ; b = malloc (size + alignment); ; .dbg line, "pmemalign.c", 89 L0009: ldy #$0C lda (sp),y clc ldy #$0E adc (sp),y pha dey lda (sp),y ldy #$0F adc (sp),y tax pla jsr _malloc sta regbank+4 stx regbank+4+1 ; ; if (b == NULL) { ; .dbg line, "pmemalign.c", 92 cpx #$00 bne L0015 cmp #$00 bne L0015 ; ; *memptr = NULL; ; .dbg line, "pmemalign.c", 93 ldy #$11 jsr ldaxysp sta sreg stx sreg+1 lda #$00 tay sta (sreg),y iny sta (sreg),y ; ; return ENOMEM; ; .dbg line, "pmemalign.c", 94 tax lda #$02 jmp L0002 ; ; u = *memptr = (struct usedblock*) (((unsigned)b + alignment) & ~alignment); ; .dbg line, "pmemalign.c", 100 L0015: ldy #$13 jsr pushwysp lda regbank+4 ldx regbank+4+1 sta ptr1 stx ptr1+1 ldy #$11 jsr ldaxysp clc adc ptr1 sta ptr1 txa adc ptr1+1 tax lda ptr1 jsr pushax ldy #$13 jsr ldaxysp jsr complax jsr tosandax ldy #$00 jsr staxspidx sta regbank+2 stx regbank+2+1 ; ; p = (struct usedblock*) ((char*)u + size); ; .dbg line, "pmemalign.c", 103 sta ptr1 stx ptr1+1 ldy #$0D jsr ldaxysp clc adc ptr1 sta ptr1 txa adc ptr1+1 tax lda ptr1 sta regbank+0 stx regbank+0+1 ; ; b = (b-1)->start; ; .dbg line, "pmemalign.c", 109 lda regbank+4 ldx regbank+4+1 sec sbc #$04 bcs L0026 dex L0026: ldy #$03 jsr ldaxidx sta regbank+4 stx regbank+4+1 ; ; rawsize = b->size; ; .dbg line, "pmemalign.c", 110 ldy #$01 lda (regbank+4),y tax dey lda (regbank+4),y ldy #$0A jsr staxysp ; ; uppersize = rawsize - (lowersize = (char*)p - (char*)b); ; .dbg line, "pmemalign.c", 118 jsr pushax lda regbank+0 ldx regbank+0+1 jsr pushax lda regbank+4 ldx regbank+4+1 jsr tossubax ldy #$08 jsr staxysp jsr tossubax ldy #$08 jsr staxysp ; ; if (uppersize >= sizeof (struct freeblock) && ; .dbg line, "pmemalign.c", 119 cpx #$00 bne L002F cmp #$06 L002F: bcc L002D ; ; lowersize >= sizeof (struct freeblock)) { ; .dbg line, "pmemalign.c", 120 ldy #$07 lda (sp),y cmp #$00 bne L0031 dey lda (sp),y cmp #$06 L0031: bcc L002D ; ; p->size = uppersize; ; .dbg line, "pmemalign.c", 123 ldy #$09 jsr ldaxysp ldy #$00 sta (regbank+0),y iny txa sta (regbank+0),y ; ; p->start = p; ; .dbg line, "pmemalign.c", 124 lda regbank+0 ldx regbank+0+1 iny sta (regbank+0),y iny txa sta (regbank+0),y ; ; free (p + 1); ; .dbg line, "pmemalign.c", 127 lda regbank+0 ldx regbank+0+1 clc adc #$04 bcc L0039 inx L0039: jsr _free ; ; rawsize = lowersize; ; .dbg line, "pmemalign.c", 130 ldy #$07 jsr ldaxysp ldy #$0A jsr staxysp ; ; lowersize = ((char*)u - (char*)b) - sizeof (struct usedblock); ; .dbg line, "pmemalign.c", 141 L002D: lda regbank+2 ldx regbank+2+1 jsr pushax lda regbank+4 ldx regbank+4+1 jsr tossubax sec sbc #$04 bcs L003F dex L003F: ldy #$06 jsr staxysp ; ; if ( lowersize >= sizeof (struct freeblock) && ; .dbg line, "pmemalign.c", 142 cpx #$00 bne L0042 cmp #$06 L0042: bcc L0040 ; ; (rawsize - lowersize) >= sizeof (struct freeblock)) { ; .dbg line, "pmemalign.c", 143 ldy #$0D jsr pushwysp ldy #$09 jsr ldaxysp jsr tossubax cpx #$00 bne L0045 cmp #$06 L0045: bcc L0040 ; ; b->size = lowersize; ; .dbg line, "pmemalign.c", 148 ldy #$07 jsr ldaxysp ldy #$00 sta (regbank+4),y iny txa sta (regbank+4),y ; ; b->start = b; ; .dbg line, "pmemalign.c", 149 lda regbank+4 ldx regbank+4+1 iny sta (regbank+4),y iny txa sta (regbank+4),y ; ; free (b + 1); ; .dbg line, "pmemalign.c", 152 lda regbank+4 ldx regbank+4+1 clc adc #$04 bcc L004D inx L004D: jsr _free ; ; rawsize -= lowersize; ; .dbg line, "pmemalign.c", 155 ldy #$07 jsr ldaxysp ldy #$0A jsr subeqysp ; ; b = u - 1; ; .dbg line, "pmemalign.c", 158 lda regbank+2 ldx regbank+2+1 sec sbc #$04 bcs L0052 dex L0052: sta regbank+4 stx regbank+4+1 ; ; b->size = rawsize; ; .dbg line, "pmemalign.c", 167 L0040: ldy #$0B jsr ldaxysp ldy #$00 sta (regbank+4),y iny txa sta (regbank+4),y ; ; (u-1)->start = b; ; .dbg line, "pmemalign.c", 168 lda regbank+2 ldx regbank+2+1 sec sbc #$04 bcs L0057 dex L0057: sta sreg stx sreg+1 lda regbank+4 ldx regbank+4+1 iny sta (sreg),y iny txa sta (sreg),y ; ; return EOK; ; .dbg line, "pmemalign.c", 170 ldx #$00 txa ; ; } ; .dbg line, "pmemalign.c", 171 L0002: pha ldy #$00 L005A: lda (sp),y sta regbank+0,y iny cpy #$06 bne L005A pla ldy #$12 jmp addysp .dbg line .endproc