/[pcre]/code/trunk/sljit/sljitNativeARM_v5.c
ViewVC logotype

Diff of /code/trunk/sljit/sljitNativeARM_v5.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 879 by zherczeg, Sat Jan 14 17:05:53 2012 UTC revision 880 by zherczeg, Sun Jan 15 17:23:37 2012 UTC
# Line 820  static int emit_op(struct sljit_compiler Line 820  static int emit_op(struct sljit_compiler
820          int src1, sljit_w src1w,          int src1, sljit_w src1w,
821          int src2, sljit_w src2w);          int src2, sljit_w src2w);
822    
823  SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)  SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
824  {  {
825          int size;          int size;
826          sljit_uw push;          sljit_uw push;
827    
828          CHECK_ERROR();          CHECK_ERROR();
829          check_sljit_emit_enter(compiler, args, temporaries, generals, local_size);          check_sljit_emit_enter(compiler, args, temporaries, saveds, local_size);
830    
831          compiler->temporaries = temporaries;          compiler->temporaries = temporaries;
832          compiler->generals = generals;          compiler->saveds = saveds;
833    
834          /* Push general registers, temporary registers          /* Push saved registers, temporary registers
835             stmdb sp!, {..., lr} */             stmdb sp!, {..., lr} */
836          push = PUSH | (1 << 14);          push = PUSH | (1 << 14);
837          if (temporaries >= 5)          if (temporaries >= 5)
838                  push |= 1 << 11;                  push |= 1 << 11;
839          if (temporaries >= 4)          if (temporaries >= 4)
840                  push |= 1 << 10;                  push |= 1 << 10;
841          if (generals >= 5)          if (saveds >= 5)
842                  push |= 1 << 8;                  push |= 1 << 8;
843          if (generals >= 4)          if (saveds >= 4)
844                  push |= 1 << 7;                  push |= 1 << 7;
845          if (generals >= 3)          if (saveds >= 3)
846                  push |= 1 << 6;                  push |= 1 << 6;
847          if (generals >= 2)          if (saveds >= 2)
848                  push |= 1 << 5;                  push |= 1 << 5;
849          if (generals >= 1)          if (saveds >= 1)
850                  push |= 1 << 4;                  push |= 1 << 4;
851          EMIT_INSTRUCTION(push);          EMIT_INSTRUCTION(push);
852    
853          /* Stack must be aligned to 8 bytes: */          /* Stack must be aligned to 8 bytes: */
854          size = (1 + generals) * sizeof(sljit_uw);          size = (1 + saveds) * sizeof(sljit_uw);
855          if (temporaries >= 4)          if (temporaries >= 4)
856                  size += (temporaries - 3) * sizeof(sljit_uw);                  size += (temporaries - 3) * sizeof(sljit_uw);
857          local_size += size;          local_size += size;
# Line 862  SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_ Line 862  SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_
862                  FAIL_IF(emit_op(compiler, SLJIT_SUB, ALLOW_IMM, SLJIT_LOCALS_REG, 0, SLJIT_LOCALS_REG, 0, SLJIT_IMM, local_size));                  FAIL_IF(emit_op(compiler, SLJIT_SUB, ALLOW_IMM, SLJIT_LOCALS_REG, 0, SLJIT_LOCALS_REG, 0, SLJIT_IMM, local_size));
863    
864          if (args >= 1)          if (args >= 1)
865                  EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(MOV_DP, 0, SLJIT_GENERAL_REG1, SLJIT_UNUSED, RM(SLJIT_TEMPORARY_REG1)));                  EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(MOV_DP, 0, SLJIT_SAVED_REG1, SLJIT_UNUSED, RM(SLJIT_TEMPORARY_REG1)));
866          if (args >= 2)          if (args >= 2)
867                  EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(MOV_DP, 0, SLJIT_GENERAL_REG2, SLJIT_UNUSED, RM(SLJIT_TEMPORARY_REG2)));                  EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(MOV_DP, 0, SLJIT_SAVED_REG2, SLJIT_UNUSED, RM(SLJIT_TEMPORARY_REG2)));
868          if (args >= 3)          if (args >= 3)
869                  EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(MOV_DP, 0, SLJIT_GENERAL_REG3, SLJIT_UNUSED, RM(SLJIT_TEMPORARY_REG3)));                  EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(MOV_DP, 0, SLJIT_SAVED_REG3, SLJIT_UNUSED, RM(SLJIT_TEMPORARY_REG3)));
870    
871          return SLJIT_SUCCESS;          return SLJIT_SUCCESS;
872  }  }
873    
874  SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)  SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
875  {  {
876          int size;          int size;
877    
878          CHECK_ERROR_VOID();          CHECK_ERROR_VOID();
879          check_sljit_set_context(compiler, args, temporaries, generals, local_size);          check_sljit_set_context(compiler, args, temporaries, saveds, local_size);
880    
881          compiler->temporaries = temporaries;          compiler->temporaries = temporaries;
882          compiler->generals = generals;          compiler->saveds = saveds;
883    
884          size = (1 + generals) * sizeof(sljit_uw);          size = (1 + saveds) * sizeof(sljit_uw);
885          if (temporaries >= 4)          if (temporaries >= 4)
886                  size += (temporaries - 3) * sizeof(sljit_uw);                  size += (temporaries - 3) * sizeof(sljit_uw);
887          local_size += size;          local_size += size;
# Line 903  SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_ Line 903  SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_
903                  FAIL_IF(emit_op(compiler, SLJIT_ADD, ALLOW_IMM, SLJIT_LOCALS_REG, 0, SLJIT_LOCALS_REG, 0, SLJIT_IMM, compiler->local_size));                  FAIL_IF(emit_op(compiler, SLJIT_ADD, ALLOW_IMM, SLJIT_LOCALS_REG, 0, SLJIT_LOCALS_REG, 0, SLJIT_IMM, compiler->local_size));
904    
905          pop = POP | (1 << 15);          pop = POP | (1 << 15);
906          /* Push general registers, temporary registers          /* Push saved registers, temporary registers
907             ldmia sp!, {..., pc} */             ldmia sp!, {..., pc} */
908          if (compiler->temporaries >= 5)          if (compiler->temporaries >= 5)
909                  pop |= 1 << 11;                  pop |= 1 << 11;
910          if (compiler->temporaries >= 4)          if (compiler->temporaries >= 4)
911                  pop |= 1 << 10;                  pop |= 1 << 10;
912          if (compiler->generals >= 5)          if (compiler->saveds >= 5)
913                  pop |= 1 << 8;                  pop |= 1 << 8;
914          if (compiler->generals >= 4)          if (compiler->saveds >= 4)
915                  pop |= 1 << 7;                  pop |= 1 << 7;
916          if (compiler->generals >= 3)          if (compiler->saveds >= 3)
917                  pop |= 1 << 6;                  pop |= 1 << 6;
918          if (compiler->generals >= 2)          if (compiler->saveds >= 2)
919                  pop |= 1 << 5;                  pop |= 1 << 5;
920          if (compiler->generals >= 1)          if (compiler->saveds >= 1)
921                  pop |= 1 << 4;                  pop |= 1 << 4;
922    
923          return push_inst(compiler, pop);          return push_inst(compiler, pop);
# Line 2141  SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_ Line 2141  SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_
2141  /*  Other instructions                                                   */  /*  Other instructions                                                   */
2142  /* --------------------------------------------------------------------- */  /* --------------------------------------------------------------------- */
2143    
2144  SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int generals, int local_size)  SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int saveds, int local_size)
2145  {  {
2146          int size;          int size;
2147    
2148          CHECK_ERROR();          CHECK_ERROR();
2149          check_sljit_emit_fast_enter(compiler, dst, dstw, args, temporaries, generals, local_size);          check_sljit_emit_fast_enter(compiler, dst, dstw, args, temporaries, saveds, local_size);
2150    
2151          compiler->temporaries = temporaries;          compiler->temporaries = temporaries;
2152          compiler->generals = generals;          compiler->saveds = saveds;
2153    
2154          size = (1 + generals) * sizeof(sljit_uw);          size = (1 + saveds) * sizeof(sljit_uw);
2155          if (temporaries >= 4)          if (temporaries >= 4)
2156                  size += (temporaries - 3) * sizeof(sljit_uw);                  size += (temporaries - 3) * sizeof(sljit_uw);
2157          local_size += size;          local_size += size;

Legend:
Removed from v.879  
changed lines
  Added in v.880

  ViewVC Help
Powered by ViewVC 1.1.5