Should the shift amount be an immediate value, or a value stored in a register? Does both work?

I've had different websites tell me different things and am confused.

Based on my research the sll (shift left logical) instruction should be used like this:

```
  sll $d, $t, h

```

Which makes $d = $t shifted left h times.

I've been told that h should be a immediate value, but I was wondering if a register could be used as the third argument, and the value inside that register used as the shift amount. Would that also work?