- Jul 27, 2012
-
-
Akira Hatanaka authored
replace uses of function getMaxCallFrameSize defined in MipsFunctionInfo with the one MachineFrameInfo has. llvm-svn: 160841
-
- Jul 26, 2012
-
-
Akira Hatanaka authored
Patch by Reed Kotler. llvm-svn: 160774
-
- Jul 25, 2012
-
-
Akira Hatanaka authored
The long branch pass (fixed in r160601) no longer uses the global base register to compute addresses of branch destinations, so it is not necessary to reserve a slot on the stack. llvm-svn: 160703
-
- Jul 24, 2012
-
-
Akira Hatanaka authored
ExecutionEngine/test-fp.ll. Patch by Petar Jovanovic. llvm-svn: 160653
-
Akira Hatanaka authored
Hello world will compile and execute with this patch. Patch by Reed Kotler. llvm-svn: 160651
-
- Jul 23, 2012
-
-
Akira Hatanaka authored
llvm-svn: 160636
-
- Jul 21, 2012
-
-
Akira Hatanaka authored
This pass no longer requires that the global pointer value be saved to the stack or register since it uses bal instruction to compute branch distance. llvm-svn: 160601
-
Akira Hatanaka authored
llvm-svn: 160599
-
Akira Hatanaka authored
llvm-svn: 160598
-
Akira Hatanaka authored
Test case will be added later when long branch patch is checked in. llvm-svn: 160597
-
- Jul 18, 2012
-
-
Jack Carter authored
Print the high order register of a double word register operand. In 32 bit mode, a 64 bit double word integer will be represented by 2 32 bit registers. This modifier causes the high order register to be used in the asm expression. It is useful if you are using doubles in assembler and continue to control register to variable relationships. This patch also fixes a related bug in a previous patch: case 'D': // Second part of a double word register operand case 'L': // Low order register of a double word register operand case 'M': // High order register of a double word register operand I got 'D' and 'M' confused. The second part of a double word operand will only match 'M' for one of the endianesses. I had 'L' and 'D' be the opposite twins when 'L' and 'M' are. llvm-svn: 160429
-
Akira Hatanaka authored
Patch by Reed Kotler. llvm-svn: 160403
-
- Jul 16, 2012
-
-
Jack Carter authored
Mips shift instructions DSLL, DSRL and DSRA are transformed into DSLL32, DSRL32 and DSRA32 respectively if the shift amount is between 32 and 63 Here is a description of DSLL: Purpose: Doubleword Shift Left Logical Plus 32 To execute a left-shift of a doubleword by a fixed amount--32 to 63 bits Description: GPR[rd] <- GPR[rt] << (sa+32) The 64-bit doubleword contents of GPR rt are shifted left, inserting zeros into the emptied bits; the result is placed in GPR rd. The bit-shift amount in the range 0 to 31 is specified by sa. This patch implements the direct object output of these instructions. llvm-svn: 160277
-
- Jul 13, 2012
-
-
Jakob Stoklund Olesen authored
Call instructions are no longer required to be variadic, and variable_ops should only be used for instructions that encode a variable number of arguments, like the ARM stm/ldm instructions. llvm-svn: 160189
-
Jack Carter authored
is used in cases where global symbols are directly represented in the GOT and we use an offset into the global offset table. This patch adds direct object support for R_MIPS_GOT_DISP. llvm-svn: 160183
-
- Jul 12, 2012
-
-
Jack Carter authored
When WriteFragmentData() case FT_align called Asm.getBackend().writeNopData() is called, nothing is done since Mips implementation of writeNopData just returned "true". For some reason this has not caused problems in 32 bit mode, but in 64 bit mode it caused an assert when processing multiple function units. The test case included will assert without this patch. It runs twice with different flags to prevent false positives due to changes in code generation over time. llvm-svn: 160084
-
- Jul 11, 2012
-
-
Jack Carter authored
Even though variable in question could not be initialized before use, the code was such that the compiler had no way of knowing that. llvm-svn: 160081
-
Akira Hatanaka authored
order of binary encoding. Patch by Vladimir Medic. llvm-svn: 160073
-
Akira Hatanaka authored
llvm-svn: 160064
-
Akira Hatanaka authored
Patch by Sasa Stankovic. llvm-svn: 160031
-
Jack Carter authored
Low order register of a double word register operand. Operands are defined by the name of the variable they are marked with in the inline assembler code. This is a way to specify that the operand just refers to the low order register for that variable. It is the opposite of modifier 'D' which specifies the high order register. Example: main() { long long ll_input = 0x1111222233334444LL; long long ll_val = 3; int i_result = 0; __asm__ __volatile__( "or %0, %L1, %2" : "=r" (i_result) : "r" (ll_input), "r" (ll_val)); } Which results in: lui $2, %hi(_gp_disp) addiu $2, $2, %lo(_gp_disp) addiu $sp, $sp, -8 addu $2, $2, $25 sw $2, 0($sp) lui $2, 13107 ori $3, $2, 17476 <-- Low 32 bits of ll_input lui $2, 4369 ori $4, $2, 8738 <-- High 32 bits of ll_input addiu $5, $zero, 3 <-- Low 32 bits of ll_val addiu $2, $zero, 0 <-- High 32 bits of ll_val #APP or $3, $4, $5 <-- or i_result, high 32 ll_input, low 32 of ll_val #NO_APP addiu $sp, $sp, 8 jr $ra If not direction is done for the long long for 32 bit variables results in using the low 32 bits as ll_val shows. There is an existing bug if 'L' or 'D' is used for the destination register for 32 bit long longs in that the target value will be updated incorrectly for the non-specified part unless explicitly set within the inline asm code. llvm-svn: 160028
-
- Jul 10, 2012
-
-
Akira Hatanaka authored
llvm-svn: 159971
-
- Jul 09, 2012
-
-
Akira Hatanaka authored
Access mips register classes via MCRegisterInfo's functions instead of via the TargetRegisterClasses defined in MipsGenRegisterInfo.inc. llvm-svn: 159953
-
- Jul 06, 2012
-
-
Akira Hatanaka authored
llvm-svn: 159854
-
Akira Hatanaka authored
Include file MipsGenRegisterInfo.inc. llvm-svn: 159851
-
Jack Carter authored
Mips specific inline asm operand modifier D. Comment changes and predicate change. llvm-svn: 159802
-
Jack Carter authored
Print the second half of a double word operand. The include list was cleaned up a bit as well. Also the test case was modified to test for both big and little patterns. llvm-svn: 159787
-
- Jul 05, 2012
-
-
Akira Hatanaka authored
mips32 rev1 (the directives are emitted when target is mips32r2 too). llvm-svn: 159770
-
- Jul 03, 2012
-
-
Jack Carter authored
inlineasm-cnstrnt-bad-r-1.ll is NOT supposed to fail, so it was removed. This resulted in the removal of a negative test (inlineasm-cnstrnt-bad-r-1.ll) llvm-svn: 159625
-
Eric Christopher authored
it appears to be breaking the bots. This reverts commit 1b055ce320fa13f6f1ac81670d11b45e01f79876. llvm-svn: 159619
-
Jack Carter authored
inlineasm-cnstrnt-bad-r-1.ll is NOT supposed to fail, so it was removed. This resulted in the removal of a negative test (inlineasm-cnstrnt-bad-r-1.ll) llvm-svn: 159610
-
- Jul 02, 2012
-
-
Jack Carter authored
Contributer: Sasa Stankovic llvm-svn: 159574
-
Bob Wilson authored
This is a preliminary step toward having TargetPassConfig be able to start and stop the compilation at specified passes for unit testing and debugging. No functionality change. llvm-svn: 159567
-
- Jun 28, 2012
-
-
Jack Carter authored
the comment per code review feedback. llvm-svn: 159376
-
Jack Carter authored
following description in the gnu sources: Print $0 if operand is zero otherwise print the op normally. llvm-svn: 159324
-
Bill Wendling authored
include/llvm/Analysis/DebugInfo.h to include/llvm/DebugInfo.h. The reasoning is because the DebugInfo module is simply an interface to the debug info MDNodes and has nothing to do with analysis. llvm-svn: 159312
-
Jack Carter authored
It takes advantage of r159299 which introduces relocation support for N64. elf-dump needed to be upgraded to support N64 relocations as well. This passes make check. Jack llvm-svn: 159302
-
Jack Carter authored
It takes advantage of r159299 which introduces relocation support for N64. elf-dump needed to be upgraded to support N64 relocations as well. This passes make check. Jack llvm-svn: 159301
-
Jack Carter authored
which many Mips 64 ABIs use than for O64 which many if not all other target ABIs use. Most architectures have the following 64 bit relocation record format: typedef struct { Elf64_Addr r_offset; /* Address of reference */ Elf64_Xword r_info; /* Symbol index and type of relocation */ } Elf64_Rel; typedef struct { Elf64_Addr r_offset; Elf64_Xword r_info; Elf64_Sxword r_addend; } Elf64_Rela; Whereas N64 has the following format: typedef struct { Elf64_Addr r_offset;/* Address of reference */ Elf64_Word r_sym; /* Symbol index */ Elf64_Byte r_ssym; /* Special symbol */ Elf64_Byte r_type3; /* Relocation type */ Elf64_Byte r_type2; /* Relocation type */ Elf64_Byte r_type; /* Relocation type */ } Elf64_Rel; typedef struct { Elf64_Addr r_offset;/* Address of reference */ Elf64_Word r_sym; /* Symbol index */ Elf64_Byte r_ssym; /* Special symbol */ Elf64_Byte r_type3; /* Relocation type */ Elf64_Byte r_type2; /* Relocation type */ Elf64_Byte r_type; /* Relocation type */ Elf64_Sxword r_addend; } Elf64_Rela; The structure is the same size, but the r_info data element is now 5 separate elements. Besides the content aspects, endian byte reordering will be different for the area with each element being endianized separately. I treat this as generic and continue to pass r_type as an integer masking and unmasking the byte sized N64 values for N64 mode. I've implemented this and it causes no affect on other current targets. This passes make check. Jack llvm-svn: 159299
-
- Jun 27, 2012
-
-
Akira Hatanaka authored
llvm-svn: 159243
-